librtmp分析(接收数据包处理)

Posted “好记性不如”烂博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了librtmp分析(接收数据包处理)相关的知识,希望对你有一定的参考价值。

RTMP详细分析(三次握手)
RTMP详细分析(Message 消息,Chunk分块)
librtmp分析(发送数据包处理)

rtmp协议中的message的接收涉及有message 组合多个chunk、相对时间戳计算绝对值。
分析一下librtmp库中的int RTMP_SendPacket(RTMP *r, RTMPPacket *packet, int queue)函数可以更好的理解。

1、刚开始接收一个字节的判断Basic Header占用多少个字节,获取fmt、csid。

在这里插入图片描述

2、申请用来保存上一次Packet的Packet*空间和保存上次时间戳空间

在这里插入图片描述

3、判断这次Packet是否是RTMP_LARGE_HEADER_SIZE,就知道是否是绝对值。否则将上次的Packet复制过来,就是同一个消息了。

在这里插入图片描述

4、读取message header中的字段。

在这里插入图片描述

5、读扩展时间戳

在这里插入图片描述

6、申请消息体的空间

在这里插入图片描述

7、读取消息体

在这里插入图片描述

8、备份这次Packet,和判断这次Packet消息是否完整了(一个或多个Packet组成)计算时间戳。

在这里插入图片描述

以上是关于librtmp分析(接收数据包处理)的主要内容,如果未能解决你的问题,请参考以下文章

UDP主要丢包原因及具体问题分析

Linux系统下网络数据包的处理流程

调试libRTMP代码来分析RTMP协议

RTMP协议抓包分析推流过程

RTMP协议抓包分析拉流过程

如何解码包数据,包分析