live555源碼分析——RTSP服務端發送數據流程

一直有個疑惑,發送rtp數據的時間間隔在哪裏控制的,onDemandServer 從文件中讀取h264,aac等,也沒有看到sleep,wait等等。但是播放依然是勻速的。【live555使用單線程任務驅動的方式,scheduleDelayedTask(int64_t microseconds,...) 這個就可以添加一個延遲指定時間執行的任務】
拿aac ADTSAudioFileSource.cpp來分析,這裏面的 doGetNextFrame()中有一個操作,  fDurationInMicroseconds = fuSecsPerFrame;
一張流程圖解釋:基於ontestDemandServer 播放test.aac來分析(分析播放h264流程的話,大體原理是一樣的,但是從FramedSource中取數據出來部分,經過了好些個FrameFilter, 其目的只是分析h264的pps,sps,和分解NAL,最終給出一幀一幀的NAL。所以整個還是相當於一個FramedSource的作用。 而aac-ADTS文件的讀取,就好分析得多了。)
以下圖:粉色表示開始,紫色表示整個流的play結束調用。橙色部分是RTPSink, 綠色部分表示FramedSource.兩個模塊之間的藍色箭頭,就構成循環讀取幀並打包發送的循環體。速度間隔控制,在於MultFramedRTPSink類裏面的sendPacketIfNecessary(),發完當前幀,添加一個延時uSecondsToGo的任務,來驅動發送下一幀。

live555rtp循環發送

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