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。(轉載請註明做者和出處~)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++