RTMP协议入门

 

1、什么是rtmp:
RTMP(the Real-time Messaging Protocol)协议作为客户端和服务器端的传输协议,这是一个专门为高效传输视频、音频和数据而设计的 TCP/IP 协议,使用 RTMP 协议传输的数据是未经加密的,包括用户名和密码等认证信息。

2、rtmp协议的应用:
现在最主要的就是在视频流这块,youtube,tudou等等都是经典案例。但是因为fms服务器的价格实在让人难以接受,所以中小型企业部署应该还是需要考虑下成本的。

3、red5项目:
red5是一个java的开源项目,通过对rtmp数据包的逆向工程研究,得出了协议的很多细节。他是全球无数开源人的心血结晶。

下面开始详细分析rtmp协议。
rtmp作为一个流媒体协议,必须拥有高度的实时性,而我们知道基于tcp的流始终是单线的,不能真正意义上的并发发送视频和音频包。rtmp协议通过频道的概念进行分包,每128字节为块,因为包片很短,所以不停的切换,根据时间戳同步,就能实现多流并发播放。

rmtp协议由3部分组成:
[协议头],[协议体],[协议数据]
协议头,1byte
其中前两位标示协议头长,它可能为以下的四种组合
0x00 -->头长12,完整头,标示新流
0x01 -->头长8
0x10 -->头长4
0x11 -->头长1
(注,此处头长包括此头本身)
后六位表示流的全局唯一id,red5将其理解为channel,因为有时音频和视频数据会同时传递,所以不同的流是可以交替的。最大同步流可能64.

一个完整的协议体(包括头),应该是12byte长
1 2 3 4 5 6 7 8 9 10 11 12
其中1号位的解释见上
2-4号位 unknow,据red5解释,其为时间相关。
5-7号位 标示了AMF体的长度,就是协议数据的长度。这儿需要说明下,流体最大为128的chunk,如果大于这个数值,将会被分包,但是有且仅有一个12位完整头描述了完整体的大小。
8号位 AMF对象类型,它可能为以下所示:
0×01 Chunk Size changes the chunk size for packets
0×02 Unknown anyone know this one?
0×03 Bytes Read send every x bytes read by both sides
0×04 Ping ping is a stream control message, has subtypes
0×05 Server BW the servers downstream bw
0×06 Client BW the clients upstream bw
0×07 Unknown anyone know this one?
0×08 Audio Data packet containing audio
0×09 Video Data packet containing video data
0x0A - 0×11 Unknown anyone know?
0×12 Notify an invoke which does not expect a reply
0×13 Shared Object has subtypes
0×14 Invoke like remoting call, used for stream actions too.
0x0A - 0×11 Unknown anyone know?
0×12 Notify an invoke which does not expect a reply
0×13 Shared Object has subtypes
0×14 Invoke like remoting call, used for stream actions too.
9-12号位定义了流的频道号,此处应该反转后获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值