SpringBoot集成ffmpeg实现视频转码播放示例详解

 更新时间:2023年07月04日 10:25:51   作者:code2roc  
这篇文章主要为大家介绍了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视频转码的资料请关注脚本之家其它相关文章!

相关文章

  • 浅谈Java的虚拟机结构以及虚拟机内存的优化

    浅谈Java的虚拟机结构以及虚拟机内存的优化

    这篇文章主要介绍了Java的虚拟机结构以及虚拟机内存的优化,讲到了JVM的堆和栈空间及GC垃圾回收等重要知识,需要的朋友可以参考下
    2016-03-03
  • 浅析Spring配置文件

    浅析Spring配置文件

    本文主要对Spring配置文件进行了介绍。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Java异常处理机制throws举例详解

    Java异常处理机制throws举例详解

    这篇文章主要介绍了Java中异常处理机制,包括finally的使用、异步处理的方式(throws)、以及手动抛出异常,finally用于确保资源释放,throws用于声明方法可能抛出的异常,由调用者处理,手动抛出异常则是在特定条件下主动抛出异常对象,需要的朋友可以参考下
    2024-11-11
  • Java多种经典排序算法(含动态图)

    Java多种经典排序算法(含动态图)

    排序算法是老生常谈的了,但是在面试中也有会被问到,例如有时候,在考察算法能力的时候,不让你写算法,就让你描述一下,某个排序算法的思想以及时间复杂度或空间复杂度。我就遇到过,直接问快排的,所以这次我就总结梳理一下经典的十大排序算法以及它们的模板代码
    2021-04-04
  • Springbean的几种注入方式都了解吗

    Springbean的几种注入方式都了解吗

    这篇文章主要介绍了Springbean的几种注入方式都了解吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 在springboot3微项目中如何用idea批量创建单元测试逻辑

    在springboot3微项目中如何用idea批量创建单元测试逻辑

    这篇文章主要介绍了在SpringBoot3项目中使用IntelliJIDEA批量创建单元测试包括准备工作(确保项目配置正确,添加测试依赖),使用IntelliJIDEA创建测试,感兴趣的朋友一起看看吧
    2024-10-10
  • springboot集成spring cache缓存示例代码

    springboot集成spring cache缓存示例代码

    本篇文章主要介绍了springboot集成spring cache示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • SpringMVC结合ajaxfileupload.js实现文件无刷新上传

    SpringMVC结合ajaxfileupload.js实现文件无刷新上传

    这篇文章主要介绍了SpringMVC结合ajaxfileupload.js实现文件无刷新上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 详解Java深拷贝,浅拷贝和Cloneable接口

    详解Java深拷贝,浅拷贝和Cloneable接口

    这篇文章主要为大家详细介绍了Java中Cloneable接口以及深拷贝与浅拷贝的相关知识,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-08-08
  • Java8 新特性之日期时间对象及一些其他特性

    Java8 新特性之日期时间对象及一些其他特性

    这篇文章主要介绍了Java8 新特性之日期时间对象及一些其他特性,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01

最新评论