前言:最近项目需要把rtsp的视频流截取保存为MP4文件。经过多方调研,最终找到方案:调用ffmpeg命令行完成转码。ffmpeg命令行确实稳定靠谱!ok,下面就开始分享代码。
这是我的ffmpeg的版本。
我这里rtsp流用的海康硬盘录里的,没有的同学可以网上找一些,有专门的网站提供一些免费的有一些流量的流,比如:
rtsp://rtspstream:e06d5bdf15e5f992e39ebb33506c805e@zephyr.rtsp.stream/movie
rtsp://rtspstream:742cb3f7bb397805f9e7829718fec9d8@zephyr.rtsp.stream/pattern
1.ffmpegPath一定要写绝对路径的地址(如 D:\ffmpeg\ffmpeg.exe).
2.command在add的时候一定是一个字符一个位置不能直接拼成一句,也不要在单独拼接空格。否则直接会抛出无效的指令
3.获取的输入流必须单独建立一个线程来进行结果的打印,如果直接转字节打印,结束方法就会无效。
4.输出流在次和dos发送指令时一定要刷新。
核心处理类 RtspToMP4.java
-
- import org.springframework.stereotype.Component;
-
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
-
- /**
- * TODO:
- *
- * @Author: gaowh
- * @create: 2024/4/24 10:11
- */
- @Component
- public class RtspToMP4 {
-
- public class In implements Runnable{
- private InputStream inputStream;
-
- public In(InputStream inputStream) {
- this.inputStream = inputStream;
- }
- @Override
- public void run() {
- try {
- //转成字符输入流
- InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
- int len = -1;
- char[] c = new char[1024];