RTMP集合消息详解

想了解rtmp的可以先看看这篇博客:RTMP协议中文翻译(首发)
1.rtmp集合消息介绍
集合消息是一个独立消息,包含了一系列的RTMP消息,格式描述见6.1章。此消息的类型为22。

集合消息由消息头和消息内容组成,更准确的说应该是由多个flv tag组成,这里的消息头并不是指rtmp消息头,而是指flv tag头。
FLV文件格式官方规范详解

消息内容由子消息组成,子消息由消息头,消息数据,回放指针组成。

               +---------+-------------------------+
               | Header  | Aggregate Message body  |
               +---------+-------------------------+
                   The Aggregate Message format

  +--------+-------+---------+--------+-------+---------+ - - - -
  |Header 0|Message|Back     |Header 1|Message|Back     |
  |        |Data 0 |Pointer 0|        |Data 1 |Pointer 1|
  +--------+-------+---------+--------+-------+---------+ - - - -
                 The Aggregate Message body format

集合消息的消息流ID覆盖此消息内的子消息流的ID。

集合消息和第一个子消息的时间戳之间的偏移量,用来将子消息的时间戳处理为流的时间刻度。每个子消息的时间戳可以通过添加偏移量来处理为正常的流时间。第一个子消息的时间戳应该和集合消息的时间戳相同,因此偏移量应该为零。

反向指针包含了以前的消息的大小。集合消息包含此字段,一是为了适配FLV文件格式,二是为了回放定位。

使用集合消息有如下几个优势:

块流在一个块内至多可以携带一条完整的消息。使用集合消息之后,不仅可以增加块大小,同时还减少了发送的块数量。

集合消息的子消息可以连续的存储在内存中。当系统调用网络发送数据时更高效。

2.rtmp集合消息例子
下面是程序打印出来一段rtmp集合消息(已经去掉了消息头和块头):


08 00 00 FF AA 05 9C D8 00 00 01 AF
01 21 1A D4 A5 B2 0F 62 71 59 94 C2
73 0A A2 B7 74 3A 15 78 D9 A2 D8 6B


//08:消息类型为音频
//00 00 FF:消息长度255(不包括消息头)
//AA 05 9C D8:timestamp=0xD8AA059C
//00 00 01:Stream ID=1
//AF:A表示音频格式=10(AAC)

接下来跳过中间的音频数据直接看下一个消息:



60 FE 00 00 00 FF 09 00 05 BC AA 05
B9 D8 00 00 01 27 01 00 00 28 00 00
00 02 09 50 00 00 00 10 06 01 01 04


//00 00 00 FF:Back Pointer占4个字节值与上个消息长度相等
//09:消息类型为视频
//00 05 BC:消息长度=0x0005BC(1468)
//AA 05 B9 D8:timestamp=0xD8AA05B9
//00 00 01:Stream ID=1
//27:2表示h264的普通帧,7表示视频编码为AVC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值