LIVE555play流程
来源:互联网 发布:网络武侠剧 编辑:程序博客网 时间:2024/06/10 02:14
5.1放假了,昨日研究了LIVE555的play部分的源码,不敢独享,贡献出来分享。
调用栈
BasicTaskScheduler0::doEventLoop()
{
}
void BasicTaskScheduler::SingleStep()
{
}
voidRTSPServer::RTSPClientSession::incomingRequestHandler1()
{
}
void RTSPServer::RTSPClientSession::handleRequestBytes(intnewBytesRead)
{
}
RTSPServer::RTSPClientSession::handleCmd_PLAY(ServerMediaSubsession*subsession,
char const* cseq,
char const* fullRequestStr)
{
}
void OnDemandServerMediaSubse
{
到了Play阶段,会调用startStream,里面会调用StreamState::startPlaying然后,fRTPSin->startPlaying(定义在MediaSink::startPlaying),里面会把MediaSink的参数fSource设置且前面的fMediaSource,然后执行continurePlaying()
serverRequestAlternative
}
StreamState:startPlaying(Destinations* dests,
{
}
MediaSink::startPlaying(MediaSource& source,
{
}
H264VideoRTPSink::continuePlaying()
{
在H264VideoRTPSink::continurePlaying()里面,会让fSource等于H264VideoRTPSink::fOurFragmenter(一个H264FUAFagmenterclass),而原来的fSource变为fOurFragmenter的fInputSource,然后执行MultiFramedRTPSink::continuePlaying()......MultiFramedRTPSink::buildAndSendPacket(true)...... MultiFramedRTPSink :: packFrame()
}
H264FUAFragmenter::H264FUAFragmenter(UsageEnvironment&env,
{
}
MultiFramedRTPSink::continuePlaying()
{
}
MultiFramedRTPSink::buildAndSendPacket(BooleanisFirstPacket)
{
}
MultiFramedRTPSink::packFrame()
H264FUAFragmenter继承自FramedFilter :FramedSource在上面的fOurFragmenter的构造函数里面就定义了FramedFilter::fInputSource等于fSourceH264FUAFragm
enter :: doGetNextFrame() 會 設定 FramedFilter ::fInputSource 的 fTo , i.e.
memmove(fTo, &fInputBuffer[1],fNumValidDataBytes - 1);
&fInputBuffer[1] =>startcode应该可以一起放进去,所以 fInputBuffer 是我们 startcode + NAL hdr + NALpayload 要存的地方
}
FramedSource::getNextFrame(unsigned char* to,
{
fNumTruncatedBytes = 0; // by default; could be changed bydoGetNextFrame()
}
H264FUAFragmenter::doGetNextFrame()
{
}
FramedSource::afterGetting(FramedSource* source) {
}
MultiFramedRTPSink::afterGettingFrame(void* clientData,
{
}
MultiFramedRTPSink::afterGettingFrame1(unsigned frameSize,
unsigned numTruncatedBytes,
unsigned durationInMicroseconds)
{
}
MultiFramedRTPSink::sendPacketIfNecessary()
{
nextTask() = envir().taskScheduler()
.scheduleDelayedTask(uSecondsToGo, (TaskFunc*)sendNext,this);
}
// The following is called after each delay between packetsends:
MultiFramedRTPSink::sendNext(void* firstArg)
{
}
- LIVE555play流程
- LIVE555play流程 .
- LIVE555play流程
- 流程
- 流程
- 流程
- 流程
- 流程
- 流程
- 流程
- 流程
- 流程
- 流程
- 流程、流程?流程...
- 流程 ,Not流程 ?
- 流程 ,Not流程 ?
- JBPM发布流程、查询流程、删除流程
- 配置管理流程
- -bash: export: ` ': not a valid identifier
- ubuntu下单网卡绑定多个IP
- Intellij Idea 搭建的 Spring MVC报错404
- java 接口
- OOP,COP,AOP,SOP
- LIVE555play流程
- 【Leetcode】139. Word Break
- Touch 事件的分发和消费机制
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- 很多人说tpshop垃圾,是不是真的
- python-字符编码
- redis-desktop-manager的使用
- HTML知识点☞元素坐标定位
- xposed初体验