• Java调用ffmpeg把rtsp视频流保存为MP4文件,并播放


    前言:最近项目需要把rtsp的视频流截取保存为MP4文件。经过多方调研,最终找到方案:调用ffmpeg命令行完成转码。ffmpeg命令行确实稳定靠谱!ok,下面就开始分享代码。

    1、环境工具准备
     ffmpeg的程序和一个稳定的rtsp流


    这是我的ffmpeg的版本。

    我这里rtsp流用的海康硬盘录里的,没有的同学可以网上找一些,有专门的网站提供一些免费的有一些流量的流,比如:
    rtsp://rtspstream:e06d5bdf15e5f992e39ebb33506c805e@zephyr.rtsp.stream/movie
    rtsp://rtspstream:742cb3f7bb397805f9e7829718fec9d8@zephyr.rtsp.stream/pattern

    2、工具类代码,说几个重点也是我踩了很久才出来的坑:
     

    1.ffmpegPath一定要写绝对路径的地址(如 D:\ffmpeg\ffmpeg.exe).
    2.command在add的时候一定是一个字符一个位置不能直接拼成一句,也不要在单独拼接空格。否则直接会抛出无效的指令
    3.获取的输入流必须单独建立一个线程来进行结果的打印,如果直接转字节打印,结束方法就会无效。
    4.输出流在次和dos发送指令时一定要刷新。

    核心处理类 RtspToMP4.java

    1. import org.springframework.stereotype.Component;
    2. import java.io.InputStream;
    3. import java.io.InputStreamReader;
    4. import java.io.OutputStream;
    5. import java.text.SimpleDateFormat;
    6. import java.util.ArrayList;
    7. import java.util.Date;
    8. import java.util.List;
    9. /**
    10. * TODO:
    11. *
    12. * @Author: gaowh
    13. * @create: 2024/4/24 10:11
    14. */
    15. @Component
    16. public class RtspToMP4 {
    17. public class In implements Runnable{
    18. private InputStream inputStream;
    19. public In(InputStream inputStream) {
    20. this.inputStream = inputStream;
    21. }
    22. @Override
    23. public void run() {
    24. try {
    25. //转成字符输入流
    26. InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
    27. int len = -1;
    28. char[] c = new char[1024];
  • 相关阅读:
    外网系统怎么访问协同oa?快解析内网端口映射公网
    IDEA控制台中文乱码
    【论文阅读】视频理解系列论文精读
    第1章 数据库及其表的自动生成与前言
    自定义注解和@Target、@Retention注解的使用
    NIO基础知识
    ArduPilot开源飞控之AP_Camera
    MySQL数据库 —— 常用语句
    《Linux运维总结:基于快照模式迁移单节点elasticsearch数据(方案二)》
    JS逆向之巨量星图sign签名
  • 原文地址:https://blog.csdn.net/gaowenhui2008/article/details/138162441