RTMP学习(一)RTMP协议介绍

RTMP协议介绍




Message



    rtmp协议中的数据被称为message(消息)。一个message包含message head和message body。





Chunk

    在网上传输的时候,如果一个message太大,那么它将会被分段传输。一个分段被称为chunk,chunk包含chunk head 和chunk body。


chunk的长度初始长度固定为128个字节,但是这个值可以在建立连接之后进行修改。
其中chunk的具体的格式如下:

basic header 、chunk Msg Header、 Extend TimeStamp共同组成了chunk header。



Chunk Basic Header


    Basic Header长度为1~3字节,它包含:fmt,stream id。fmt决定了消息头的编码方式,该字段的长度依赖于stream id,因此basic header的长度是可变的。但是目前普通的basic header的长度一般是1字节。
    一字节长度的basic header典型构成如下(其中fmt占2bit):
        fmt=0,那么chunk Msg header长度是11
        fmt=1,那么chunk Msg header长度是7
        fmt=2,那么chunk Msg header长度是3
        fmt=3,那么chunk Msg header长度是0






Chunk Msg header


    Chunk Msg Header的长度可能为0,3,7,11字节。它包含了将要发送的Message的相关信息。它的长度由basic header得type字段决定。


11字节的Chunk Msg header




    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 stream id:4bytes
        message stream id的字节序是小端序,这个字段是为了解复用而设计的,RTMP文档上说的相当的模糊



7字节的Chunk Msg header



时间戳部分是相对时间,它的值是和上一个绝对时间之间的差值



3字节的Chunk Msg header






0字节的Chunk Msg header

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



Extend timeStamp

    长度可能是0,4字节。它表示扩展的时间戳字段(在前面的Chunk Msg Header中还有一个叫时间戳的字段)。当时间戳字段等于0xffffff的时候,该字段才被发送,否则不发送。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值