Live555 Streaming Media整體框架
UsageEnvironment模組是對系統環境的抽象,包括抽象類UsageEnvironment和TaskScheduler。UsageEnvironment主要用於訊息的輸入輸出和用戶互動功能;TaskScheduler實現事件的異步處理、事件處理函式的註冊等,它通過維護一個異步讀取源實現對諸如通信訊息到達等事件的處理,通過使用DelayQueue實現對其他註冊函式的延時調度。該模組還包含一個HashTable類,在整個項目中都可以用到它。程式設計者通過自定義該抽象了類UsageEnvironment和TaskScheduler類的子類,就可以在特定環境(如GUI環境)中運行,不需要進行過多的修改。
BasicUsageEnvironment模組是UsageEnvironment的一個控制台套用的實現。它針對控制台的輸入輸出和信號回響進行具體實現。
GroupSock模組用於實現數據包的傳送和接收。GroupSock主要被設計用以支持多播,但它也完全支持單播通信。
LiveMedia模組是Live555最重要的模組。該模組聲明了一個抽象類Medium,其他所有類都派生自該類,下面簡要介紹這些類:
Ø RTSPClient:該類實現RTSP請求的傳送和回響的解析,同時根據解析的結果創建對應的RTP會話。
Ø MediaSession:用於表示一個RTP會話,一個MediaSession可能包含多個子會話(MediaSubSession),子會話可以是音頻子會話、視頻子會話等。
Ø RTCPInstance:該類實現RTCP協定的通信。
Ø Source和Sink:這兩個概念類似DirectShow中的Filter。Source抽象了數據源,比如通過RTP讀取數據。Sink是數據消費者的抽象,比如把接收到數據存儲到檔案,該檔案就是一個Sink。數據的流動可能經過多個Source和Sink。MediaSink是各種類型的Sink的基類,MediaSource是各種類型Source的基類,各種類型的流媒體格式和編碼的支持即是通過對這兩個類的派生實現的。Source和Sink通過RTP子會話(MediaSubSession)聯繫在一起。
openRTSP客戶端流程
1、創建TaskScheduler和BasicUsageEnvironment類;
2、命令行解析,獲取流媒體地址和其他選項;
3、創建RTSPClient對象;
4、如果需要,RTSPClient對象傳送OPTIONS命令並解析服務端回響,獲取可以使用命令集。
5、RTSPClient對象傳送DESCRIBE命令,並從獲服務端反饋中獲取流媒體相關描述SDP字串。
6、創建MediaSession對象,解析SDP字串,創建了相應的子會話對象。在這個過程中還完成了RTP和RTCP通信使用的GroupSock對象的創建,包括協定和連線埠的選擇。
7、根據流媒體不同類型,實例化具體的RTP會話的Source和Sink對象。
8、RTSPClient對象傳送SETUP和PLAY命令,服務端開始傳輸流媒體數據。
9、TaskScheduler開始事件處理循環,通過select監聽數據包到達並調用註冊函式進行處理。