live555源碼閱讀一

實現播放 MP3 的 RTSPServer 的基本過程:
1、首先,創建一個 RTSPServer 實例,偵聽 554 或 8554 端口,等待一個客戶端的 RTSP 請求;
2、在收到一個客戶端的 RTSP 請求後,創建一個 RTSPClientSession 實例,用於處理 RTSP 交互過程;
3、RTSPClientSession 實例在響應 RTSP DESCRIBE 命令時,將根據MP3文件名創建一個 ServerMediaSession (SMS會話)實例並將其加入到 RTSPServer 的流媒體會話集合(fServerMediaSessions)中,同時根據將要播放的文件的類型,創建一個 MP3AudioFileServerMediaSubsession (SMS子會話)實例,並將 SMS子會話 添加到 SMS會話 中;
4、RTSPClientSession 實例在響應 RTSP SETUP 命令時,將 SMS會話 和 SMS子會話 同當前客戶端會話關聯起來,再調用 SMS子會話 的
接口(getStreamParameters)創建一個讀取 MP3 文件的 MP3FileSource 實例(播放源),以及一個將 MP3 流媒體數據幀封裝到 RTP 包並從 RTP 端口發送出去的 RTPSink 實例(處理槽);
5、RTSPClientSession 實例在響應 RTSP PLAY 命令時,調用 SMS子會話 的接口設置好播放速度(setStreamSourceScale)和起始播放位置(seekStreamSource),最後再調用 SMS子會話 的接口(startStream)開始播放 MP3 ;
6、在 SMS子會話 的播放接口(startStream)裏,實際調用到了 RTPSink 實例上的播放接口(startPlaying), RTPSink 實例再調用 MP3FileSource 實例的接口(getNextFrame)從 MP3 文件循環讀取一幀幀的數據,
然後將其封裝到 RTP 包中從 RTP 端口發送出去。

 

在RTSP服務器端,Source相當於從流媒體文件讀取數據的工具,Sink相當於將Source讀取到的一幀幀數據封裝成一個個RTP包併發送出去的工具。個人認爲,之前從網上看到的Source和Sink概念理解起來太抽象,對於剛接觸live555的人來說太費勁。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章