live555 h264 videostream 數據流和時間戳的分析

rtsp客戶端發送播放請求後,rtsp服務器調用流程如下
h264 video rtsp
1.ServerMediaSubsession::startStream -> OnDemandServerMediaSubsession::startStream
2.startStream -> StreamState::startPlaying
3.MediaSink::startPlaying
4.MediaSink::continuePlaying->MultiFramedRTPSink::continuePlaying
5.MultiFramedRTPSink::buildAndSendPacket
6.MultiFramedRTPSink::packFrame()  fSource->getNextFrame fSource type is H264FUAFragmenter
7.FramedSource::getNextFrame
8.FramedSource::doGetNextFrame ->H264FUAFragmenter::doGetNextFrame  ->  fInputSource->getNextFrame fInputSource type is H264VideoStreamFramer
9.H264VideoStreamFramer::getNextFrame -> MPEGVideoStreamFramer::doGetNextFrame
10.MPEGVideoStreamFramer::continueReadProcessing -> fParser->parse()   fParser type is H264VideoStreamParser
11.H264VideoStreamParser::parse()   -> ByteStreamFileSource::doGetNextFrame -> ByteStreamFileSource::doReadFromFile


時間戳生成流程
1.MultiFramedRTPSink::buildAndSendPacket 中組建rtp包頭時,獲取時間戳的位置fTimestampPosition,然後等待獲取數據與時間戳後寫入
2.MultiFramedRTPSink::afterGettingFrame1 ->H264VideoRTPSink::doSpecialFrameHandling->MultiFramedRTPSink::setTimestamp 將時間戳寫入到rtp包中

3.H264VideoStreamParser::parse 中調用H264VideoStreamFramer::setPresentationTime { fPresentationTime = fNextPresentationTime; } 此fPresentationTime最終將傳到步驟2中
4.fNextPresentationTime 初始化由構造函數獲取當前時間戳 ,後續在H264VideoStreamParser::parse 當thisNALUnitEndsAccessUnit=TRUE後,根據幀率計算幀duration,然後計算下一幀的時間戳
發佈了50 篇原創文章 · 獲贊 23 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章