Live555接收RTSP直播流,轉換Http Live Streaming(iOS直播)協議
RTSP協議也是廣泛使用的直播/點播流媒體協議,之前實現過一個通過live555接收RTSP協議,然后轉換為HLS(Http Live Streaming)直播協議文件的程序,為的是可以接收遠端設備或服務器的多路RTSP直播數據,實時轉換為HLS協議文件,以實現iPhone或iPad等設備觀看RTSP直播源的需求。現在把實現的思路分享如下。
要點分析
首先,程序的主要目的,是從多路RTSP輸入源中提取AAC編碼的音頻和H.264編碼視頻數據,並生成Http Live Streaming所支持的MPEG-TS格式分段文件以及對應的m3u8文件。因此,本程序的關鍵點有以下部分:
- RTSP直播流的讀取
- H.264和AAC編碼數據的分析、處理
- MPEG-TS打包以及HLS分段生成策略
- m3u8索引文件
有了關鍵點,就可以一項一項的去分析。
設計思路
根據上面分析的要點,首先要選擇RTSP直播協議的讀取。我們不需要從零做起,網絡上有很多和RTSP相關的開源項目可以使用或借鑒,我選擇了Live555。
Live555是一個跨平台的流媒體解決方案,主要支持RTSP協議,好像也支持SIP(這個也是我馬上研究的重點,之后會寫文章研究SIP相關的技術實現)。Live555實現了RTSP包括服務器-客戶端的整套結構,是很知名的一個開源項目。網上有很多關於Live555學習和使用的文章,我就不具體介紹了。
H.264和AAC數據的分析處理,這個對於從沒做過相關項目開發的人來說,應該是一個難點,主要是相關概念的理解。好在我一直在做這塊,也比較好弄。
第3和第4點,可以參照我之前的文章“Http Live Streaming直播(iOS直播)技術分析與實現”的技術方法,來加以實現。因此,主要需要處理的就是RTSP直播流數據的獲取,以及對其中H.264和AAC編碼數據的處理。
於是可以畫出大體結構如下:

邏輯與實現
1. 程序框架和模塊說明

2. RtspCapture的接口
RtspCapture是我的程序里管理RTSP直播數據流和分析處理的類,接口很重要,基本上這個設計就可以。(當然,全部代碼是不會放上來的,有興趣的可以和我談,這里只羅列關鍵的地方。)

他所使用的live555變量,這里ourRTSPClient實際就是RTSPClient的簡單繼承

3.RtspCapture調用live555的主要流程
1. 首先,在RtspCapture構造函數初始化

2. 在StartRtsp函數中,創建RtspClient,並發送"describe"命令,開始獲取sdp。回調函數就是continueAfterDESCRIBE。在這里創建MediaSession,之后再發送"setup"命令,等,這些都可以在live555的例子以及網上的說明中看到。

3. 還有一個關鍵點,就是要在自己的線程循環中,調用live555 environment的事件循環,就像這樣

4. 對rtsp回調h264數據的分析處理
這里演示了,如何從rtsp回調的h264數據中,提取sps和pps信息。里面的parse函數,是live555自帶的。

程序效果
程序界面,很簡單。

配置文件配置如下:

打開rtsp服務器,可以用vlc來串流文件作為RTSP服務器測試
iPhone上顯示

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
haibindev.cnblogs.com,合作請聯系QQ。(轉載請注明作者和出處~)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
