• 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];
  • 相关阅读:
    低功耗窗帘电机解决方案成功应用并通过 Matter 1.1 认证
    【qemu逃逸】HWS2017-FastCP
    关系数据库系统中的 NULL 值及其用途
    XCode15与iOS17/17.1 真机测试问题处理
    mysql 递归获取内容
    通信总线协议四 :SPI
    Ims通话流程分析
    Java性能调优System的gc垃圾回收方法
    两分钟搞懂什么是反向代理与正向代理
    消灭指标二义性!提效30%的指标管理如何炼成?
  • 原文地址:https://blog.csdn.net/gaowenhui2008/article/details/138162441