rtmp数据封装四-音频(AAC&G711)

前面文章《rtmp数据封装一-块(chunk)》中讲到rtmp传输媒体数据时是把一整帧数据拆分成chunk的形式发送的。其实一帧媒体数据在拆分成chunk之前还需要进行必要的头部信息封装,本文介绍rtmp协议中AAC/G.711音频数据的头部信息封装。

第一个byte包含音频的编码参数:

  • 1-4bit: audioCodeId
  • 5-6bit: 采样率 00 5.5KHZ, 01 11KHZ, 10 22KHZ, 11 44KHZ
  • 7 bit: 采样长度 0 8bit, 1 16bit
  • 8 bit: 立体声 0 单声道, 1 双声道

AAC rtmp头部信息封装

第一帧 AAC sequence header

第一帧共4个byte:

1) 第1个byte : audioCodeId=10,如果是44KHZ、16bit、双声道,第一个byte是0xAF。如果实际采样率不是5.5KHZ、11KHZ、22KHZ、44KHZ,就选一个接近的。

2) 第2个byte : 0x00 表示是sequence header

3) 第3-4个byte : 0x14,0x10

其他帧 AAC raw data

1) 第1个byte : audioCodeId=10,如果是44KHZ、16bit、双声道,第一个byte是0xAF。如果实际采样率不是5.5KHZ、11KHZ、22KHZ、44KHZ,就选一个接近的。

2) 第2个byte : 0x01 表示是raw data

3) 第3byte开始 : 去掉前7个byte的AAC头之后的AAC数据。

G.711U rtmp头部信息封装

1) 第1个byte : audioCodeId=8,如果是11KHZ、16bit、单声道,第一个byte是0x86。如果实际采样率不是5.5KHZ、11KHZ、22KHZ、44KHZ,就选一个接近的。

2) 第2个byte开始是存放G.711U数据。

G.711A rtmp头部信息封装

1) 第1个byte : audioCodeId=7,如果是11KHZ、16bit、单声道,第一个byte是0x76。如果实际采样率不是5.5KHZ、11KHZ、22KHZ、44KHZ,就选一个接近的。

2) 第2个byte开始是存放G.711A数据。