上次提到source-sink,也就是SDP消息的组装过程,在OnDemandServerMediaSubsession::sdpLines()中创建了临时的FileSource和RTPSink,先看下这两个createNew
FramedSource* H264VideoFileServerMediaSubsession::createNewStreamSource(unsigned /*clientSessionId*/, unsigned& estBitrate) {
estBitrate = 500; // kbps, estimate
// Create the video source:
ByteStreamFileSource* fileSource = ByteStreamFileSource::createNew(envir(), fFileName);
if (fileSource == NULL) return NULL;
fFileSize = fileSource->fileSize();
// Create a framer for the Video Elementary Stream:
return H264VideoStreamFramer::createNew(envir(), fileSource);
}
RTPSink* H264VideoFileServerMediaSubsession
::createNewRTPSink(Groupsock* rtpGroupsock,
unsigned char rtpPayloadTypeIfDynamic,
FramedSource* /*inputSource*/) {
return H264VideoRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic);
}
先看source部分,可以看到,实际文件资源定义的部分是ByteStreamFileSource,它的倒继承关系为:
ByteStreamFileSource::FramedFileSource::FramedSource::MediaSource
而返回的却是H264VideoStreamFramer,我们看下它的倒继承关系为:
H264VideoStreamFramer::MPEGVideoStreamFramer::FramedFilter::FramedSource::MediaSource
其实ByteStreamFileSource确实是最初始打开文件获得Byte流的地方,但是单单知道一个Byte-Source还不够,一个最终的处理h264文件,分析格式的Sourc