从crtmpserver中看具体处理rtmp协议的流程4
2012-12-14 01:18
246 查看
在接收到客户端发送的34bytes
再去掉12bytes的头剩下22bytes
Deserialize来解码
完全的数据在这里被消耗了
在
中进行处理
这里多N多事情
然后最核心的是这里
这次写了8192的数据
再去掉12bytes的头剩下22bytes
Deserialize来解码
switch (H_MT(header)) { ... case RM_HEADER_MESSAGETYPE_FLEX: { message[RM_INVOKE][RM_INVOKE_IS_FLEX] = (bool)(H_MT(header) == RM_HEADER_MESSAGETYPE_FLEX); return DeserializeInvoke(buffer, message[RM_INVOKE]); } }
bool RTMPProtocolSerializer::DeserializeInvoke(IOBuffer &buffer, Variant &message) { if (message[RM_INVOKE_IS_FLEX]) { if (!buffer.Ignore(1)) { FATAL("Unable to ignore 1 byte"); return false; } } if (!_amf0.ReadShortString(buffer, message[RM_INVOKE_FUNCTION])) { FATAL("Unable to read %s", STR(RM_INVOKE_FUNCTION)); return false; } if (!_amf0.ReadDouble(buffer, message[RM_INVOKE_ID])) { FATAL("Unable to read %s", STR(RM_INVOKE_ID)); return false; } for (uint32_t i = 0; GET***AILABLEBYTESCOUNT(buffer) > 0; i++) { if (!_amf0.Read(buffer, message[RM_INVOKE_PARAMS][i])) { FATAL("Unable to de-serialize invoke parameter %u", i); return false; } } return true; }
完全的数据在这里被消耗了
在
bool BaseRTMPAppProtocolHandler::InboundMessageAvailable(BaseRTMPProtocol *pFrom, Variant &request) { switch ((uint8_t) VH_MT(request)) { case RM_HEADER_MESSAGETYPE_FLEX: { return ProcessInvoke(pFrom, request); } } }
中进行处理
bool BaseRTMPAppProtocolHandler::ProcessInvoke(BaseRTMPProtocol *pFrom, Variant &request) { ... else if (functionName == RM_INVOKE_FUNCTION_PLAY) { return ProcessInvokePlay(pFrom, request); }
这里多N多事情
bool BaseRTMPAppProtocolHandler::ProcessInvokePlay(BaseRTMPProtocol *pFrom, Variant & request) { ...在这里生成meta文件,生成seek文件 }
然后最核心的是这里
void BaseOutNetRTMPStream::SignalAttachedToInStream() { //1. Store the attached stream type to know how we should proceed on detach ... //2. Mirror the feeder chunk size ... //3. Fix the time base ... //4. Store the metadata ... //5. Send abort messages on audio/video channels ... //6. Stream is recorded ... //7. Stream begin ... if (_sendOnStatusPlayMessages) { //8. Send NetStream.Play.Reset ... //9. NetStream.Play.Start ... //10. notify |RtmpSampleAccess ... } //11. notify onStatus code="NetStream.Data.Start" ... //12. notify onMetaData ... }
bool BaseInStream::Play(double absoluteTimestamp, double length) { if (!SignalPlay(absoluteTimestamp, length)) { FATAL("Unable to signal play"); return false; } LinkedListNode<BaseOutStream *> *pTemp = _pOutStreams; while (pTemp != NULL) { if (!pTemp->info->SignalPlay(absoluteTimestamp, length)) { WARN("Unable to signal play on an outbound stream"); } pTemp = pTemp->pPrev; } return true; }
这次写了8192的数据
相关文章推荐
- 从crtmpserver中看具体处理rtmp协议的流程1
- 从crtmpserver中看具体处理rtmp协议的流程2
- 从crtmpserver中看具体处理rtmp协议的流程
- 从crtmpserver中看具体处理rtmp协议的流程3
- 从crtmpserver中看具体处理rtmp协议的流程5
- 关于CrtmpServer中的RTMP协议头处理
- 第三方登录----Oauth协议处理流程(QQ)
- Spring MVC请求处理具体流程
- CrtmpServer支持Android与IOS进行RTMP直播遇到的_checkbw问题
- USB协议处理和枚举流程
- Delegate协议的使用,对按钮的处理,对return按键的处理,程序流程
- RTMP直播点播-基于开源crtmpserver
- webx相关概念与具体处理流程
- crtmpserver 基本流程分析
- HTTP协议 处理流程
- kfs代码研究(二、meta server处理流程)
- HBase源码分析之HRegionServer上MemStore的flush处理流程(一)
- Openfire Server presence在线状态消息处理流程
- 高性能服务通信框架Gaea的详细实现--server请求处理流程
- crtmpserver 基本流程分析