获取视频处理对象的方式有很多,读取本地文件、读取url、读取摄像头等,而直接读流解析视频的实施方案却难以寻觅。此处有两种方案处理视频流(此处设定场景为用户上传视频,同时两种方式均需服务端安装ffmpeg+opencv):
1.io流保存本地再读取
该方案没有太多技术含量,直接借助java.io+opencv-VideoCapture即可实现视频的解帧等操作。
1)保存本地
本地保存为求方便,直接使用 apache.commons.io.FileUtils.copyInputStreamToFile(InputStream,File)方法
//MultipartFile videoFile
InputStream videoInputStream =videoFile.getInputStream();
File file= new File(path + getRandomFileName() + ".mp4");
FileUtils.copyInputStreamToFile(videoInputStream,file);
2) 视频解析
此处视频解析,可以直接使用整合了ffmpeg的opencv中的VideoCapture对象来操作
VideoCapture = new VideoCapture(file.getPath());
3) 业务要求
项目业务要求,取视频前两秒的20帧,转储为Mat矩阵的集合
//此处的视频操作常量来自 javacv
Double rawFps = videoCapture.get(opencv_highgui.CV_CAP_PROP_FPS);//帧率
Double valid