RTMP协议详解(三)

转载 2012年03月21日 13:49:54

Chunk Msg Header:

Chunk Msg Header的长度是可变的,Chunk Msg Header可变的原因是为了压缩传输的字节数,把一些相同类型的chunk的head去掉一些字节,换句话说就是四种类型的包头都可以通过一定的规则还原成11个字节,这个压缩和还原在RTMP协议中称之为复用/解复用。

那我们以11个字节的完整包头来解释Chunk Msg Header,如图所示

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+                    timestamp          +            message length         + message type  id +                message stream id     +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Timestamp:3bytes

对于type 0的chunk,绝对时间戳在这里表示,如果时间戳值大于等于0xffffff(16777215),该值必须是0xffffff,且时间戳扩展字段必须发送,其他情况没有要求。

message length:3bytes

Message的长度,注意这里的长度并不是跟随chunk head其后的chunk data(Payload)的长度,而是前文提到的一条信令或者一帧视频数据或音频数据的长度。前文提到过信令或者媒体数据都称之为Message,一条Message可以分为一条或者多条chunk。

message type  id:1byte

Message的类型ID,具体的值将在后文专门来讨论。

message stream id:4bytes

message stream id的字节序是小端序,这个字段是为了解复用而设计的,RTMP文档上说的相当的模糊,

 

message stream ID可以使任意值,不同的消息流复用成相同的chunk stream,基于它们的ID能够解复用。于chunk stream 是相关的,这个字段是一个不透明的值没有整明白什么意思,我的理解就是用来标识和服务器连接的flash端的序号。

长度是7 bytes 的chunk head,该类型不包含stream ID,该chunk的streamID和前一个chunk的stream ID是相同的,变长的消息,例如视频流格式,在第一个新的chunk以后使用这种类型,注意其中时间戳部分是相对时间,为何上一个绝对时间之间的差值 如图所示:

++++++++++++++++++++++++++++++++++++++++++++++++++++++

+         timestamp    delta      +            message length         + message type  id +             

++++++++++++++++++++++++++++++++++++++++++++++++++++++

        3 bytes的chunk head,该类型既不包含stream ID 也不包含消息长度,这种类型用于stream ID和前一个chunk相同,且有固定长度的信息,例如音频流格式,在第一个新的chunk以后使用该类型。如图所示:

                           ++++++++++++++++++++

                           +         timestamp    delta      +          

                           ++++++++++++++++++++


        0 bytes的chunk head,这种类型的chunk从前一个chunk得到值信息,当一个单个消息拆成多个chunk时,这些chunk除了第一个以外,其他的都应该使用这种类型,

chunk的长度:

chunk的长度初始长度固定为128个字节,但是这个值并不是不可变的,在客户端和服务端建立连接以后,客户端和服务端都可以通过发送信令的方式来通知对端修改chunk的长度,理论上来说可以修改chunk的最长长度为65536。这里chunk的长度是指chunk的数据部分的长度,即chunk data(payload)的长度,如果一条Message的数据长度超过了chunk的长度,就必须把Message分割成多条chunk,即如果一条视频类型Message长度为2000个byte,chunk长度为1500,则该Message将会分割成两条chunk,第一条的chunk data长度为1500,第二条的chunk data长度为500。当然这两条chunk的chunk head肯定是不同的,其中第二条chunk的chunk head就是0字节的。


RTMP协议(中文)详解以及规范

  • 2017年12月05日 09:46
  • 1006KB
  • 下载

RTMP协议详解

  • 2016年11月18日 11:07
  • 1.37MB
  • 下载

实时消息传输协议(RTMP)详解

概述概念:RTMP协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频、视频和互动内容)。RTMP提供了一套全双工的可靠的多路复用消息服务,类似于TCP协议[RFC...

RTMP协议详解(一)

Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 具体使用RTMP的...
  • stardtx
  • stardtx
  • 2012年03月21日 13:48
  • 540

RTMP协议详解(转)

文章转自http://my.oschina.net/chen106106/blog/49392 Real Time Messaging Protocol(实时消息传送协议协议)是Adobe ...

RTMP协议详解

Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 具体使用RTMP的...

RTMP协议详解(转) ----- 这方面的资料太少了

资料太少了  ,,,转载 转自《RTMP协议详解(一) (二) (三) 》 Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Syste...

RTMP、RTSP、HTTP视频协议详解(附:直播流地址、播放软件)

一、RTMP、RTSP、HTTP协议 这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用 RTMP、RTSP。而点播...

RTMP协议详解(二)

RTMP的字节序:       RTMP的字节序和大多数网络协议一样是大端序,也有一些字段是小端序的,不过都有特殊的说明。 RTMP的head组成          RTMP的head在协议...
  • stardtx
  • stardtx
  • 2012年03月21日 13:49
  • 572

RTMP学习(三)RTMP协议详解(转)

原文地址:http://www.cnblogs.com/android-blogs/p/5650771.html Real Time Messaging Protocol(实时消息传...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RTMP协议详解(三)
举报原因:
原因补充:

(最多只允许输入30个字)