**:
flv檔案主要由兩部分組成:header和body。
header部分記錄了flv的型別、版本等資訊,是flv的開頭,一般都差不多,佔9bytes。具體格式如下:
檔案型別
3 bytes
「flv」
版本1 byte
一般為0x01
流資訊1 byte
header長度
4 bytes
整個header的長度,一般為9;大於9表示下面還有擴充套件資訊
每個tag前面還包含了previous tag size欄位,表示前面乙個tag的大小。
body部分由乙個個tag組成,每個tag的下面有一塊4bytes的空間,用來記錄這個tag的長度,這個後置用於逆向讀取處理,他們的關係如下圖:
每個tag由也是由兩部分組成的:tag header和tag data。tag header裡存放的是當前tag的型別、資料區(tag data)長度等資訊,具體如下:
名稱長度
介紹tag型別
1 bytes
資料區長度
3 bytes
在資料區的長度
時間戳3 bytes
整數,單位是毫秒。對於指令碼型的tag總是0
時間戳擴充套件
1 bytes
將時間戳擴充套件為4bytes,代表高8位。很少用到
streamsid
3 bytes
總是0資料區(data)
由資料區長度決定
資料實體
2.2.1.音訊資料
第乙個byte是音訊的資訊,格式如下。
名稱長度
介紹音訊格式
4 bits
0 = linear pcm, platform endian
1 = adpcm
2 = ***
3 = linear pcm, little endian
4 = nellymoser 16-khz mono
5 = nellymoser 8-khz mono
6 = nellymoser
7 = g.711 a-law logarithmic pcm
8 = g.711 mu-law logarithmic pcm
9 = reserved
10 = aac
11 = speex
14 = *** 8-khz
15 = device-specific sound
取樣率2 bits
0 = 5.5-khz
1 = 11-khz
2 = 22-khz
3 = 44-khz
對於aac總是3
取樣的長度
1 bit
0 = snd8bit
1 = snd16bit
壓縮過的音訊都是16bit
音訊型別
1 bit
0 = sndmono
1 = sndstereo
對於aac總是1
第2byte開始就是音訊流資料了。
名稱長度
介紹幀型別
4 bits
1: keyframe (for **c, a seekable frame)
2: inter frame (for **c, a non-seekable frame)
3: disposable inter frame (h.263 only)
4: generated keyframe (reserved for server use only)
5: video info/command frame
編碼id
4 bits
1: jpeg (currently unused)
2: sorenson h.263
3: screen video
4: on2 vp6
5: on2 vp6 with alpha channel
6: screen video version 2
7: **c
2.2.3指令碼資料
第乙個amf包:
第1個位元組表示amf包型別,常見的資料型別如下:
flv檔案中,第乙個位元組一般總是0x02,表示字串。第2-3個位元組為ui16型別值,標識字串的長度,一般總是0x000a(「onmetadata」長度)。後面位元組為具體的字串,一般總為「onmetadata」(6f,6e,4d,65,74,61,44,61,74,61)。
第二個amf包:
第1個位元組表示amf包型別,一般總是0x08,表示陣列。第2-5個位元組為ui32型別值,表示陣列元素的個數。後面即為各陣列元素的封裝,陣列元素為元素名稱和值組成的對。常見的陣列元素如下表:
FLV檔案格式解析
flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 其中,previous tag size 緊跟在每個 tag...
FLV檔案格式解析
原創出處 flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 一 file header結構 file head...
FLV檔案格式解析
flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 fileheader 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tagsize對組成。因此乙個flv檔案看上去是下面的結構 一 file header結構 fileheader在當前版本中...