RTMPdump代码如何改写以适应长尾关键词搜索?
- 内容介绍
- 文章标签
- 相关推荐
本文共计838个文字,预计阅读时间需要4分钟。
第一步——握手(Handshake):代码在`handshake.h`文件中,其中`Handshake`函数处理握手的逻辑。
第二步——建立连接(NetConnection):在`rtmp.cpp`文件中,首先执行一步——握手(Handshake)(代码在`handshake.h`文件中),然后继续建立连接。
第一步——握手(HandShake)代码在handshake.h文件中,该文件中HandShake函数是处理握手的。第二步-----建立连接NetConnection在文件rtmp.cpp第一步——握手(Hand Shake)
代码在 handshake.h文件中,该文件中HandShake 函数是处理握手的。第二 步-----建立连接NetConnection 在文件rtmp.cpp 中RTMP_Connect():
其内部调用了RTMP_Connect0() 和 RTMP_Connect1()。
RTMP_Connect0() 主要是建立Socket连接
RTMP_Connect1()建立RTMP连接.
第三步-----建立流 NetStream 代码也在rtmp.cpp中
RTMP_ConnectStream在这个函数中调用了
RTMP_ReadPacket()
RTMP_ClientPacket()
第一个函数的作用是读取通过Socket接收下来的消息(Message)包,但是不做任何处理。第二个函数则是处理消息(Message),并做出响应。这两个函数结合,就可以完成接收消息然后响应消息的步骤。
RTMP_ReadPacket 接收下来的是ChunkRTMP_ClientPacket() 是用来处理消息,根据不同的消息,做不同的调用。
switch(packet->m_packetType) { case 0x01:break;case 0x02:break;case0x14: if(HandleInvoke(r,packet->m_body,packet->m_nBodySize)==1)bHasMediaPacket=2;break; ......}消息类型为0x14的消息,即消息类型ID为20的消息,是AMF0编码的命令消息,
依次调用
AMF_Decode(AMFProp_GetString(AMF_GetProp((AVMATCH(//ChunkMsgHeader的类型(4种)uint8_tm_packetType;//MessagetypeID(1-7协议控制;8,9音视频;10以后为AMF编码消息)uint8_tm_hasAbsTimestamp;/*Timestamp是绝对值还是相对值?*/intm_nChannel;//块流IDuint32_tm_nTimeStamp;//Timestampint32_tm_nInfoField2;/*last4bytesinalongheader,消息流ID*/uint32_tm_nBodySize;//消息长度uint32_tm_nBytesRead;RTMPChunk*m_chunk;char*m_body;}RTMPPacket;RTMP_SendPacket()各种的RTMPPacket(即各种Chunk)都需要用这个函数进行发送。这个函数按照RTMP规范将数据编码成符合规范的块(Chunk),在这里需要注意一个函数:WriteN()。该函数完成了将数据发送出去的功能。
在这个函数里根据协议不同,调用相应的函数第五步------接收消息
RTMPdump中完成视音频数据的接收的函数是:RTMP_Read()。RTMP_Read()中实际读取数据的函数是Read_1_Packet(),它的功能是从网络上读取一个RTMPPacket的数据,Read_1_Packet()里面实现从网络中读取视音频数据的函数是RTMP_GetNextMediaPacket()。RTMP_GetNextMediaPacket 里会调用两个函数:RTMP_ReadPacket()以及RTMP_ClientPacket()。这两个函数中,前一个函数负责从网络上读取数据,后一个负责处理数据。在RTMP_ReadPacket()函数里完成从Socket中读取数据的函数是ReadN(),ReadN()中实现从Socket中接收数据的函数是RTMPSockBuf_Fill(),RTMPSockBuf_Fill()函数中调用了系统Socket的recv()函数接收RTMP连接传输过来的数据。第六步------处理各种消息
RTMPdump 的函数 RTMP_ClientPacket(), 主要完成了各种消息的处理。 消息ID 功能 调用函数 0x01 设置块(Chunk)大小 HandleChangeChunkSize() 0x03 致谢 无函数 0x04 用户控制 HandleCtrl 0x05 窗口致谢大小(Window Acknowledgement Size HandleServerBW() 0x06 设置对等端带宽(Set Peer Bandwidth) HandleClientBW() 0x08 传输音频 0x09 传输视频 0x0f--11 传输AMF3编码 0x12--14 传输AMF0编码本文共计838个文字,预计阅读时间需要4分钟。
第一步——握手(Handshake):代码在`handshake.h`文件中,其中`Handshake`函数处理握手的逻辑。
第二步——建立连接(NetConnection):在`rtmp.cpp`文件中,首先执行一步——握手(Handshake)(代码在`handshake.h`文件中),然后继续建立连接。
第一步——握手(HandShake)代码在handshake.h文件中,该文件中HandShake函数是处理握手的。第二步-----建立连接NetConnection在文件rtmp.cpp第一步——握手(Hand Shake)
代码在 handshake.h文件中,该文件中HandShake 函数是处理握手的。第二 步-----建立连接NetConnection 在文件rtmp.cpp 中RTMP_Connect():
其内部调用了RTMP_Connect0() 和 RTMP_Connect1()。
RTMP_Connect0() 主要是建立Socket连接
RTMP_Connect1()建立RTMP连接.
第三步-----建立流 NetStream 代码也在rtmp.cpp中
RTMP_ConnectStream在这个函数中调用了
RTMP_ReadPacket()
RTMP_ClientPacket()
第一个函数的作用是读取通过Socket接收下来的消息(Message)包,但是不做任何处理。第二个函数则是处理消息(Message),并做出响应。这两个函数结合,就可以完成接收消息然后响应消息的步骤。
RTMP_ReadPacket 接收下来的是ChunkRTMP_ClientPacket() 是用来处理消息,根据不同的消息,做不同的调用。
switch(packet->m_packetType) { case 0x01:break;case 0x02:break;case0x14: if(HandleInvoke(r,packet->m_body,packet->m_nBodySize)==1)bHasMediaPacket=2;break; ......}消息类型为0x14的消息,即消息类型ID为20的消息,是AMF0编码的命令消息,
依次调用
AMF_Decode(AMFProp_GetString(AMF_GetProp((AVMATCH(//ChunkMsgHeader的类型(4种)uint8_tm_packetType;//MessagetypeID(1-7协议控制;8,9音视频;10以后为AMF编码消息)uint8_tm_hasAbsTimestamp;/*Timestamp是绝对值还是相对值?*/intm_nChannel;//块流IDuint32_tm_nTimeStamp;//Timestampint32_tm_nInfoField2;/*last4bytesinalongheader,消息流ID*/uint32_tm_nBodySize;//消息长度uint32_tm_nBytesRead;RTMPChunk*m_chunk;char*m_body;}RTMPPacket;RTMP_SendPacket()各种的RTMPPacket(即各种Chunk)都需要用这个函数进行发送。这个函数按照RTMP规范将数据编码成符合规范的块(Chunk),在这里需要注意一个函数:WriteN()。该函数完成了将数据发送出去的功能。
在这个函数里根据协议不同,调用相应的函数
