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