RTMP集合消息详解

来源:互联网 发布:淘宝药店七乐康 假 编辑:程序博客网 时间:2024/06/07 14:24

想了解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

1 0
原创粉丝点击