rtmp协议基本知识总结

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

一些控制协议消息(消息类型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函数中)128位默认数据块的长度,只是数据的长度):块太大会早成视频帧阻塞,造成卡顿,块太小会传输太多的块头,减小了消息的传输。(128字节~65536字节)

这里分为(message)消息头和块头(消息分为多个块),第一个数据包的消息头必须是12bytes,告诉对方这个流的信息。

1:消息头:时间戳(4字节),长度(3字节),消息类型ID(1字节),消息流ID(消息的唯一标识)

rtmp协议包头+数据(包头长度为12,8,4,1)包头包含了head type,时间戳,amf数据类型,数据大小,流ID。根据不同的message头填充不同的参数

RTMP在首发数据的时候是把message分为chunk发送,而且必须在发送完一个chunk在重新发送下一个chunk,chunk中的messageID代表那个message,接收端将这个ID来的chunk组装成message(为了防止数据量过大,占用硬件资源)

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

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

块流ID+块类型

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:块数据:当前块的有效数据。

二:协议控制消息

RTMP的块流使用消息类型ID1,2,3,4,5,6作为控制消息,这些消息包含了必要的RTMP快流协议信息。这些协议控制消息使用0作为消息流ID,使用2作为块流ID,

设置块大小(Message ID=1),分割message(Message ID=2),Ackonwledgement(ID=3),窗口响应大小(ID=5),设置带宽大小(ID=6),不同类型的命令有不同类型的ID。音频(ID=8),视频ID=9,

命令消息(ID=17或者20) (客户端或者服务器通过发送此消息来通知对方用户控制事件,)

连接消息:connect客户端向服务器发送连接请求

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值