精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
VideoRTPSink->MultiFramedRTPSink->RTPSink->MediaSink-----------------------------------------------------------------------------sink继承关系
Boolean MediaSink::startPlaying(MediaSource& source,
afterPlayingFunc* afterFunc, void* afterClientData)
{
........................
........................
return continuePlaying();
}
Boolean MultiFramedRTPSink::continuePlaying() {--------------------------MultiFramedRTPSink 是与帧有关的类, 其实它要求每次必须从 source 获得一个帧的数据
// Send the first packet.
// (This will also schedule any future sends.)
buildAndSendPacket(True);
return True;
}
void MultiFramedRTPSink::buildAndSendPacket(Boolean isFirstPacket){
//准备 rtp 包的头,为一些需要跟据实际数据改变的字段留出位置--------------------------由此可见rtpsink是与rtp协议紧密联系的,用来打包处理rtp数据包的
................................................
................................................
packFrame();
}
packFrame------------------------------------------------------------------------------------------------------------------------------------------------最后会调用到如下关键函数
void ByteStreamFileSource::doReadFromFile() {
....................................
....................................
fFrameSize = fread(fTo, 1, fMaxSize, fFid);--------------------------------------------------------------------------我们改变数据流的地方就在这边
....................................
....................................
}