live555類圖

//補充一張完整的關係圖

分析testOnDemandRTSPServer.cpp,以test.264文件作爲輸入源,發佈rtsp。
區分不同的輸入,是h264還是aac等,即在 sms->addSubsession(H264VideoFileServerMediaSubsession ::createNew(*env, inputFileName, reuseFirstSource));   創建的H264VideoFileServerMediaSubsession. 不同的ServerMediaSubsession 需要實現ServerMediaSubsession要求的的兩個純虛函數:
1.0 virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
                          unsigned& estBitrate);
 2.0 virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock,
                                    unsigned char rtpPayloadTypeIfDynamic,
                    FramedSource* inputSource);
服務端會調用子類的這兩個函數,以創建 輸入源 FramedSrouce  和輸出端 RTPSink.  所以不同的ServerMediaSubsession都有特定的FramedSource和RTPSink的實現.
H264VideoFileServerMediaSubsession, 使用的FramedSrouce  爲一個 H264VideoStreamFramer (類似於濾鏡,這種FramedSrource同時有輸入端口和輸出端口,其輸入爲 ByteStreamFileSource ,即test.264字節流文件源。該”濾鏡“的作用,就是從字節流中解析出h264 NAL 單元。)輸出端,即H264VideoRTPSink


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