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官方协议详解

标准规范学习:rtmp消息结构,包括几个部分:时戳:4  byte,单位毫秒。超过最大值后会翻转。长度:消息负载的长度。类型ID:Type Id 一部分ID范围用于rtmp的控制信令。还有一部分可以供...
  • chgaowei
  • chgaowei
  • 2016年04月26日 10:00
  • 15505

rtmp 协议详解

RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(C...
  • kemengli
  • kemengli
  • 2016年06月30日 13:47
  • 179

RTMP协议分析及H.264打包原理

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。...
  • caoshangpa
  • caoshangpa
  • 2016年10月20日 14:20
  • 6338

RTMP协议中文翻译(首发)

翻译:阿宝  更新:2016-09-11  来源:彩色世界(https://blog.hz601.org/2016/07/03/real-time-messaging-protocol/index...
  • shishuo365
  • shishuo365
  • 2016年09月11日 20:29
  • 2589

流媒体-RTMP交互过程及协议解析

一、RTMP交互过程 1 简要介绍 播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立网络连接,建立网络流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间...
  • mm792261167
  • mm792261167
  • 2017年04月07日 09:45
  • 728

RTMP规范简单分析

RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(C...
  • leixiaohua1020
  • leixiaohua1020
  • 2013年09月14日 20:56
  • 30188

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

原文地址:http://www.cnblogs.com/android-blogs/p/5650771.html Real Time Messaging Protocol(实时消息传...
  • NB_vol_1
  • NB_vol_1
  • 2017年02月28日 17:05
  • 368

RTMP协议详解

http://www.cppblog.com/vliuchao/archive/2009/12/27/104163.html Real Time Messaging Protoc...
  • xingzheouc
  • xingzheouc
  • 2015年09月01日 16:20
  • 227

rtmp 协议分析及交互过程

RTMP流媒体播放过程 分类: RTMP2013-09-15 11:19 13039人阅读 评论(9) 收藏 举报 播放RTMP协议 本文描述了从打开一个RTMP...
  • u011244446
  • u011244446
  • 2015年07月05日 18:22
  • 6024

实时消息传输协议 RTMP(Real Time Messaging Protocol)

实时消息传输协议(RTMP)最初是由 Macromedia 为互联网上 Flash player 和服务器之间传输音频、视频以及数据流而开发的一个私有协议。Adobe 收购 Macromedia 购以...
  • defonds
  • defonds
  • 2013年12月18日 21:59
  • 16720
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RTMP协议详解(三)
举报原因:
原因补充:

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