上一篇文章介绍了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