项目上传后的视频不能在video标签里面播放,视频格式是MP4。重新编码之后就可以了
package com.video.util;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacpp.*;
import org.bytedeco.javacv.Frame;
public class VideoConvert {
private boolean isStart = true;
public void frameRecord(String inputFile, String outputFile)
throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
// 获取视频源
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
grabber.setOption("rtsp_transport","tcp");
//速度
grabber.setFrameRate(30);
//码率
grabber.setVideoBitrate(3000000);
// 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, 1);
recorder.setFrameRate(30);
recorder.setVideoBitrate(3000000);
//编码格式
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); //avcodec.AV_CODEC_ID_H264 //AV_CODEC_ID_MPEG4
recordByFrame(grabber, recorder);
}
private void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder)
throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
try {// 建议在线程中使用该方法
grabber.start();
recorder.start();
//CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
// canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//canvas.setAlwaysOnTop(true);
long t1 = System.currentTimeMillis();
Frame frame = null;
while (isStart && (frame = grabber.grabFrame()) != null) {
long t2 = System.currentTimeMillis();
if(t2-t1 > 2*60*60*1000){
break;
}else{
recorder.record(frame);
//TODO your work
}
//canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
}
recorder.stop();
grabber.stop();
} finally {
if (grabber != null) {
grabber.stop();
}
}
}
}
当然首先得引入依赖了
<dependencies>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.1-1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>3.4.2-1.4.1</version>
</dependency>
</dependencies>
解决项目上传的MP4视频无法在video标签播放的问题,通过使用FFmpeg进行视频重新编码,确保视频格式兼容性。代码示例展示了如何利用Java的javacv库进行视频格式转换。
7848

被折叠的 条评论
为什么被折叠?



