RTMP音視頻流的flv頭

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

音頻消息頭(章節E.4.2 Audio Tags)

消息頭格式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

視頻頭(E.4.3 Video Tags)

字段 比特數 說明
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視頻

當packet type爲0時(sps, pps)

數據包格式爲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的內容

當packet type爲1時(NALU)

字段 比特數 說明
nalu length 32 它是由上表中length size決定的, 一般爲4個字節. 如今的視頻數據都很大.
nalu data 8x(nalu length) H264的原始數據
相關文章
相關標籤/搜索