封裝格式 FLV 檔案格式解析

2022-09-08 09:33:11 字數 2575 閱讀 3183

**:

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在當前版本中...