RTSP协议也是普遍使用的直播/点播流媒体协议,之前的项目里实现了一个RTSP协议转换RTMP直播协议的程序,为的是能够接收远端设备或服务器的多路RTSP直播数据,实时转换为RTMP直播协议,推送到NginxRtmp等RTMP服务器,能够在PC上实现flash观看RTSP直播源(好比IPCAM)的需求,也能经过Nginx的HLS协议转换,在手机上观看。实现的思路分享以下。html
首先,程序的主要目的,是从多路RTSP输入源中提取AAC编码的音频和H.264编码视频数据,并生成RTMP数据包,而后组装RTMP推送协议,并发往RTMP服务器。在发送的过程当中,要求能够从RTSP数据源切换到具备相同h.264和aac编码的FLV文件中,并不影响RTMP直播。所以,本程序的关键点有如下部分:服务器
有了关键点,就能够一项一项的去分析。网络
根据上面分析的要点,首先要选择RTSP直播协议的读取。咱们不须要从零作起,网络上有不少和RTSP相关的开源项目能够使用或借鉴,我选择了Live555。(后来我也作了经过ffmpeg接口来读取RTSP数据的项目,也很不错,各有优缺点)并发
Live555是一个跨平台的流媒体解决方案,主要支持RTSP协议,好像也支持SIP(这个也是我立刻研究的重点,以后会写文章研究SIP相关的技术实现)。Live555实现了RTSP包括服务器-客户端的整套结构,是很知名的一个开源项目。网上有不少关于Live555学习和使用的文章,我就不具体介绍了。框架
H.264和AAC数据的分析处理,这个对于从没作过相关项目开发的人来讲,应该是一个难点,主要是相关概念的理解。好在我一直在作这块,也比较好弄。函数
第4和第5点,能够参照我以前的文章“RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播”的技术方法,来加以实现。所以,主要须要处理的就是RTSP直播流数据的获取,以及对其中H.264和AAC编码数据的处理。学习
因而能够画出大致结构以下:编码
RtspCapture是个人程序里管理RTSP直播数据流和分析处理的类,接口很重要,基本上这个设计就能够。(固然,所有代码是不会放上来的,有兴趣的能够和我谈,这里只罗列关键的地方。)spa
他所使用的live555变量,这里ourRTSPClient实际就是RTSPClient的简单继承线程
1. 首先,在RtspCapture构造函数初始化
2. 在StartRtsp函数中,建立RtspClient,并发送"describe"命令,开始获取sdp。回调函数就是continueAfterDESCRIBE。在这里建立MediaSession,以后再发送"setup"命令,等,这些均可以在live555的例子以及网上的说明中看到。
3. 还有一个关键点,就是要在本身的线程循环中,调用live555 environment的事件循环,就像这样
这里演示了,如何从rtsp回调的h264数据中,提取sps和pps信息。里面的parse函数,是live555自带的。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
haibindev.cnblogs.com,合做请联系QQ。(转载请注明做者和出处~)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++