SpringBoot集成ffmpeg实现视频转码播放示例详解
背景
之前构建过文件预览服务,对于视频部分前端播放组件限制只能为mp4格式,为了支持更多视频格式决定对方案进行升级,由于视频格式较多,针对每一种格式定制选择播放器不太现实,决定对视频源统一转码,转码后的格式为mp4,兼容性稳定且前后端改造工作较小
配置
maven添加java-all-deps引用,该引用内置不同版本ffmpeg文件,为了避免打包后文件过大,排除不需要的平台兼容支持
<dependency> <groupId>ws.schild</groupId> <artifactId>jave-all-deps</artifactId> <version>3.3.1</version> <exclusions> <!-- 排除windows 32位系统 --> <exclusion> <groupId>ws.schild</groupId> <artifactId>jave-nativebin-win32</artifactId> </exclusion> <!-- 排除linux 32位系统 --> <exclusion> <groupId>ws.schild</groupId> <artifactId>jave-nativebin-linux32</artifactId> </exclusion> <!-- 排除Mac系统--> <exclusion> <groupId>ws.schild</groupId> <artifactId>jave-nativebin-osx64</artifactId> </exclusion> <!-- 排除osxm--> <exclusion> <groupId>ws.schild</groupId> <artifactId>jave-nativebin-osxm1</artifactId> </exclusion> <!-- 排除arm--> <exclusion> <groupId>ws.schild</groupId> <artifactId>jave-nativebin-linux-arm32</artifactId> </exclusion> <exclusion> <groupId>ws.schild</groupId> <artifactId>jave-nativebin-linux-arm64</artifactId> </exclusion> </exclusions> </dependency>
转码
主要通过执行ffmpeg转换命令进行转码,指定编码器,画质,代码通过流读取执行结果,阻塞命令以同步方式执行完毕,执行完毕后写入finish.txt标识,便于前端轮询视频是否转码完毕,跳转播放页面
ffmpeg -i inputpath -c:v libx264 -crf 19 -strict experimental outputpath
ProcessWrapper ffmpeg = new DefaultFFMPEGLocator().createExecutor(); ffmpeg.addArgument("-i"); ffmpeg.addArgument(fileConvertInfo.getFilePath()); ffmpeg.addArgument("-c:v"); ffmpeg.addArgument("libx264"); ffmpeg.addArgument("-crf"); ffmpeg.addArgument("19"); ffmpeg.addArgument("-strict"); ffmpeg.addArgument("experimental"); ffmpeg.addArgument(fileConvertInfo.getFileDirPath() + "convert.mp4"); ffmpeg.execute(); try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) { blockFfmpeg(br); } File file = new File(fileConvertInfo.getFileDirPath() + "finish.txt"); file.createNewFile(); private static void blockFfmpeg(BufferedReader br) throws IOException { String line; // 该方法阻塞线程,直至合成成功 while ((line = br.readLine()) != null) { doNothing(line); } } private static void doNothing(String line) { System.out.println(line); }
经过测试以下视频格式支持转码mp4
.mp4;.asf;.avi;.dat;.f4v;.flv;.mkv;.mov;.mpg;.rmvb;.ts;.vob;.webm;.wmv;.vob
以上就是SpringBoot集成ffmpeg实现视频转码播放示例详解的详细内容,更多关于SpringBoot ffmpeg视频转码的资料请关注脚本之家其它相关文章!
相关文章
在springboot3微项目中如何用idea批量创建单元测试逻辑
这篇文章主要介绍了在SpringBoot3项目中使用IntelliJIDEA批量创建单元测试包括准备工作(确保项目配置正确,添加测试依赖),使用IntelliJIDEA创建测试,感兴趣的朋友一起看看吧2024-10-10springboot集成spring cache缓存示例代码
本篇文章主要介绍了springboot集成spring cache示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-05-05SpringMVC结合ajaxfileupload.js实现文件无刷新上传
这篇文章主要介绍了SpringMVC结合ajaxfileupload.js实现文件无刷新上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10
最新评论