三、RTMP协议 视频Chunk和音频Chunk到底长啥样?
创始人
2024-01-28 03:53:02
0

重要概念

RTMP Chunk Header

RTMP Chunk Header的长度不是固定的,分为: 12 Bytes、8 Bytes、4 Bytes、1 Byte 四种,由RTMP Chunk Header前2位决定。

FLV VideoTagHeader

分析RTMP流时,经常看到与0x170x27进行比较的情况,那0x170x27究竟是什么东东呢?

  • 0x17
    1: key frame(for AVC, a seekable frame)关键帧,比如I帧
    7: AVC

  • 0x27
    1: inter frame(for AVC, a non-seekable frame) 不是关键帧,比如P帧
    7: AVC
    故可通过与0x170x27的比较,来判断视频帧是否为关键帧。
    第二个字节是AVPacketType,这个也很常用,用来判断包的类型:
    0x00 -- AVC sequence header (即AVCc 保存AVC的profie和 SPS PPS等信息)
    0x01 -- AVC NALU 普通的NALU
    0X02 -- AVC end of sequence

FLV AudioTagHeader

AudioTagHeader的长度为2个字节。
AAC的前4个比特是:二进制的1010,即10进制的10。
AAC时,第二个字节用于指定包的类型(AACPacketType)。
如果AACPacketType = 0,则是AAC Sequence header(解码信息);
如果AACPacketType = 1,还是AAC raw(原始音频数据)。

AACPacketType = 0

AACPacketType = 1

RTMP层次(数据发送角度)

H.264的NALU是如何一步步变成RTMP Video Chunk的呢?
AAC的ADTS是如何一步步变成RTMP Audio Chunk的呢?

RTMP Video Chunk (H.264/AVC)

RTMP Video Chunk (H.264/AVC) 封装过程简图

RTMP Video Chunk (H.264/AVC) 封装过程详图

Video Chunk 举例1 AVC sequence header

0500000000003f0901000000 // 12字节的RTMP Chunk Header
17  // 1: keyframe 7:AVC 表示是AVC的关键帧
00  // 0x00: 表明当前Packet的类型是 AVC sequence header
000000 // 3字节的Composition Time
// 以下(到结尾)为实际的AVC sequence header
01 // AVC sequence header的开始 固定为0x01
4d // H.264的profile 0x4d即十进制的77 表示是 Main Profile
40
28 // H.264的level
ff
e1 // 即二进制11100001 后5位为SPS的格式 即1
002b // 2个字节 SPS的长度  即十进制的43
// 实际的SPS 以0x67开头
674d4028965200f0044f
cbff88700b4008000003
00080000030197010003
e800000fa00fe31c0da1
62d920
// 一个字节 PPS的个数 
01
// PPS的长度
0004
// 实际的PPS 以0x68开头
68eb7352

Video Chunk 举例2 关键帧的Chunk

050000000009590901000000  // 12字节的RTMP Chunk Header
17 // 1: keyframe 7:AVC 表示是AVC的关键帧
01 // 0x01: 表明当前Packet的类型是 NALU
000078
000000020910
// 4个字节 SPS的长度
0000002b
// 实际的SPS 以0x67开头
674d4028965200f0044f
cbff88700b4008000003
00080000030197010003
e800000fa00fe31c0da1
62d920
// 4个字节 PPS的长度
00000004
68eb7352 // 实际的PPS
00000016
06000980009e34000003000040010500000300002880
000008f9 // 关键帧的数据长度(从后续一直到结尾)
658880400afec077814b449b525dc855ff7a0ea8aad586c5
00000300000300000300000300003ebfcc2647000003000
0145000000898000004dc0000030350000003032400000
3038800000303f8000004c80000086800001010000018a
000003b0000030000030000030000030000030000
... // 由于数据量比较大 此处略去若干字节

RTMP Audio Chunk (AAC)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...