rtmp协议基本知识总结

此文档是想到哪写到哪:参考文档:

https://www.cnblogs.com/shishuo365/p/5862613.html

一些控制协议消息(消息类型ID可以在下列文档中查找)

https://blog.csdn.net/lipengshiwo/article/details/53267674

源码文件参考:

https://blog.csdn.net/leixiaohua1020/article/details/42105049

客户端和服务器交互文档:

https://www.cnblogs.com/zjoch/archive/2013/08/28/3286301.html

在传输的过程中以流为单位,但流又细分为块,所以传输基本的大小是块。(程序中设置也为块):

为什么设置为块(一般为128(可以动态设置,在RTMP_Init函数中)):块太大会早成视频帧阻塞,造成卡顿,块太小会传输太多的块头,减小了消息的传输。

1:rtmp传输的基本格式:(块格式)(块头+数据)(该格式很重要)

块头=基本头+消息头+扩展时间戳+块数据

a:基本头(1-3字节):块流ID和块类型

    (在这还要知道块头类型(块类型值为0.1.2.3),然后设置块流ID(简称CSID))

     1字节:2~63的块流ID      2字节64~319的块流ID  3字节64~65599字节的块流ID。

b:块消息头(0.3.7.11字节):被发送的消息,由块头类型决定(基本头中的块头类型参数)

        根据类型字段来确定消息头的大小1:类型0:11字节

         时间戳(3字节)+消息长度(3)+消息类型ID(1)+消息流ID(4)

        类型为0的块,此字段必须为绝对时间戳。如果时间戳大于等于16777215(0xFFFFFF),此字段的取值必须为16777215,并且与扩展时间戳一起组成32比特的完整时间戳。如果时间戳小于16777215,那么此字段代表了完整的时间戳

       消息长度:,实际发送的数据。块的总长度::::注意(不是块本身的长度)

       消息类型ID:发送数据的种类:音频(是8),视频(是9)等参数,

        消息流ID:该块所在的流的ID值。根据该ID将块组装成消息。

        其他类型省略:

c:扩展时间戳:取决于消息头中编码的时间戳。

            chunk中会有时间戳timestamp和时间戳差timestamp delta,并且它们不会同时存在,只有这两者之一大于3个字节能表示的最大数值0xFFFFFF=16777215时,才会用这个字段来表示真正的时间戳,否则这个字段为0。扩展时间戳占4个字节,能表示的最大数值就是0xFFFFFFFF=4294967295。当扩展时间戳启用时,timestamp字段或者timestamp delta要全置为1,表示应该去扩展时间戳字段来提取真正的时间戳或者时间戳差。注意扩展时间戳存储的是完整值,而不是减去时间戳或者时间戳差的值

d:块数据:当前块的有效数据。


猜你喜欢

转载自blog.csdn.net/zuodenghuakai/article/details/79879979