RTMP發送aac/h264數據, 須要添加flv的數據頭. 官網說明html
https://wwwimages2.adobe.com/content/dam/acom/en/devnet/flv/video_file_format_spec_v10_1.pdf網絡
h264規範 https://www.itu.int/rec/T-REC-H.264 內容比較長, 這裏只講重點.app
消息頭格式ide
名稱 | 比特數 | 說明 |
---|---|---|
sound format | 4 | 音頻的格式, 10表示aac |
sound rate | 2 | 音頻採樣率, 0表示5.5K, 1表示11K, 2表示22K, 3表示44K |
sound size | 1 | 音頻採樣的大小, 0表示8bits, 1表示16bits |
sound type | 1 | 音頻聲道類型 , 0表示單聲道, 1表雙通道 |
aac packet type | 8 | 只有aac纔有這個字節, 0表示數本數據包爲AAC配置信息AudioSpecificConfig,ISO/IEC 14496-3文檔中定義它的格式. 1表示AAC原始音頻數據. |
AudioSpecificConfig的格式編碼
字段 | 比特數 | 說明 |
---|---|---|
audioObjectType | 5 | aac的profile, 和adts中的定義是同樣的 |
samplingFrequencyIndex | 4 | aac的採樣頻率的索引, 和adts中的定義是同樣的 |
channelConfiguration | 4 | aac的通道數, 和adts中的p定義是同樣的 |
epConfig | 2 | 不知道幹什麼用的, 寫固定值"00" |
directMapping; | 1 | 不知道幹什麼用的, 寫固定值"00" |
正常狀況下, 以上兩個表總共4個字節.scala
ADTS的格式code
名稱 | 比特數 | 說明 |
---|---|---|
syncword | 12 | must be 0xFFF |
ID | 1 | 0 for mpeg-4, 1 for mpeg-2 |
layer | 2 | must be 00 |
protect | 1 | |
profile | 2 | 0 for main profile, 1 for low complexity profile, 2 for scalable sampling rate profile, 3 reserved |
frequency | 4 | 採樣頻率, 0表示96000, 1: 88200, 2: 64000,3: 48000,4: 44100,5: 32000, 6: 24000,7:22050,8: 16000, 9: 12000, 10: 11025, 11: 8000, 12: 7350, |
private | 1 | |
channel | 3 | 0:Defined in AOT Specifc Config, 1-6 for channel count, 7 for 8 channel |
copy | 1 | |
home | 1 | |
copyright | 1 | |
copyright-start | 1 | |
frame-len | 13 | |
adts-fullness | 11 | |
blocks | 2 | 無 |
舉例: 略orm
字段 | 比特數 | 說明 |
---|---|---|
frame type | 4 | 數據幀的類型, 1表示關鍵幀, 2表示非關鍵幀, 5表示視頻信息 |
codec id | 4 | 編碼類型, 7表示AVC |
packet type | 8 | 0表示配置信息(sps pps), 1表示NALU |
composite time | 24 | 若是packet type爲0, 則填0; 其它, 填時間戳, 毫秒, 一般填0, 由於rtmp已經有時間戳了 |
對於AVC/H.264格式, 接下來是AVCVIDEOPACKET視頻
數據包格式爲ISO 14496-15 5.2.4.1章節描述的AVCDecoderConfigurationRecord格式.htm
http://www.doc88.com/p-1823464610430.html
字段 | 比特數 | 說明 |
---|---|---|
version | 8 | 固定值1 |
profile indication | 8 | 等同於sps的第2個字節 |
profile compatibily | 8 | 等同於sps的第3個字節 |
level indication | 8 | 等同於sps的第4個字節 |
reserved | 6 | 固定值'111111' |
length size | 2 | 表示NALULength字段的長度, 0表示用1個字節, 2表示用兩個字節, 3表示用4個字節. 一般爲3 |
reserved | 3 | 固定值'111' |
num of sps | 5 | sps的個數, 一般爲1 |
sps length | 16 | sps的字節數, 網絡字節序 |
sps | 8x(sps length) | sps的內容 |
num of pps | 8 | pps的個數, 一般爲1 |
pps length | 16 | pps的字節數, 網絡字節序 |
pps | 8x(pps length) | pps的內容 |
字段 | 比特數 | 說明 |
---|---|---|
nalu length | 32 | 它是由上表中length size決定的, 一般爲4個字節. 如今的視頻數據都很大. |
nalu data | 8x(nalu length) | H264的原始數據 |