开源工具:实现用FFmpeg接收RTSP/RTMP/HLS流和录制文件

上一篇文章介绍了QuickGBLink开发的一个RTSP客户端《开源C++ RTSP客户端》,实现了通过TCP接收RTP流的功能,但是在局域网监控中,很多时候RTSP服务器和客户端都是用UDP模式来传输音视频,因为UDP传输效率比较高,并且内网丢包率也比较低。这篇文章我们介绍另外一种接收RTSP流的方式:利用FFmpeg的RTSP协议组件来完成RTSP流接收,这种方式既支持UDP,也支持TCP传输媒体流,并且支持多种RTP封装的视音频格式,总体上功能做得比较全面。

使用FFmpeg API接收RTSP并不复杂,通过调用高度封装的API接口,用户能很方便的控制RTSP从连接、接收到关闭的流程。FFmpeg的接口屏蔽了底层网络协议解析和接收的细节,让用户将注意力放在上层业务逻辑实现中,大大提高了用户开发相关网络流媒体功能的效率。FFmpeg支持Demux从网络中接收的流媒体,即分离出视频ES和音频ES,然后还可以进一步将分离后视音频经过Mux组件封装处理,将视音频流输出到一个文件容器中(MP4/TS/MKV/AVI等),实现录制文件的功能。

除了支持接收RTSP,FFmpeg还实现了对RTMP、HLS协议的支持,并且使用的接口都是一致的,这样大大方便了程序员对各种协议功能的集成和支持。

我们开发的这个工具就利用FFmpeg来接收RTSP、RTMP、HLS,并且使用它的Mux功能实现文件录制(MP4)。

这里只向大家强调一个问题,就是FFmpeg打开一个流要传入一个URL,这个URL就是FFmpeg内置网络协议组件支持的网络地址,比如RTSP、RTMP、HLS,这三种协议我们都测过,都是支持的。下面是每种协议URL格式的例子:

HLS:   http://vfile.grtn.cn/2017/1486/0464/6433/148604646433.ssm/148604646433.m3u8
RTSP: rtsp://admin:[email protected]/stream1
RTMP: rtmp://192.168.0.100/ffmpeg

如何使用这个工具?只需要修改配置文件中的URL地址,然后打开软件,在菜单中选择文件-》开始任务,任务就开始执行。录制的文件保存到配置文件中指定的file_path文件路径。

开源工具:实现用FFmpeg接收RTSP/RTMP/HLS流和录制文件

开源工具:实现用FFmpeg接收RTSP/RTMP/HLS流和录制文件

Github下载地址

https://github.com/QuickGBLink88/StreamRecorder