黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

FLV文件格式解析

系統 2610 0

FLV(Flash Video)是現在非常流行的流媒體格式,由于其視頻文件體積輕巧、封裝播放簡單等特點,使其很適合在網絡上進行應用,目前主流的視頻網站無一例外地使用了FLV格式。另外由于當前瀏覽器與Flash Player緊密的結合,使得網頁播放FLV視頻輕而易舉,也是FLV流行的原因之一。

FLV視頻格式是Adobe公司設計開發的,目前已經免費開放,現在的版本是v10。下面我們就了解一下FLV文件格式。

FLV是流媒體封裝格式,我們可以將其數據看為二進制字節流。總體上看,FLV包括文件頭(File Header)和文件體(File Body)兩部分,其中文件體由一系列的Tag及Tag Size對組成。因此一個FLV文件看上去是下面的結構:

FLV文件格式解析

其中, Previous Tag Size 緊跟在每個 Tag 之后,占 4 個字節表示一個 UI32 類型的數值,表示前面一個 Tag 的大小。需要注意的是, Previous Tag Size #0 的值總是為 0 Tag 類型包括視頻、音頻和 Script ,且每個 Tag 只能包含一種類型的數據。下面我們看看 File Header Tag 的具體結構,為了方便大家理解,我貼一個實際 FLV 文件的字節流圖片,圖片中把不同部分區分了顏色。

FLV文件格式解析

一、File Header結構

File Header在當前版本中總是由9個字節組成,如圖中藍色區域所示。

第1-3字節為文件標識(Signature),總為“FLV”(0x46 0x4C 0x56),如圖中紫色區域。

第4字節為版本,目前為1(0x01)。

第5個字節的前5位保留,必須為0。

第5個字節的第6位表示是否存在音頻Tag。

第5個字節的第7位保留,必須為0。

第5個字節的第8位表示是否存在視頻Tag。

第6-9個字節為UI32類型的值,表示從File Header開始到File Body開始的字節數,版本1中總為9。

二、Previous Tag Size結構

如圖中紅色位置所示。

三、Tag結構

Tag包括Tag Header和Tag Data兩部分。不同類型的Tag的Header結構是相同的,但是Data結構各不相同。如圖中綠色和黃色區域分別表示Tag Header數據和Tag Data數據。

當前版本的Tag Header結構占用11個字節。

第1個字節表示Tag類型,包括音頻(0x08)、視頻(0x09)和script data(0x12),其他類型值被保留。

第2-4字節為UI24類型的值,表示該Tag Data部分的大小。

第5-7字節為UI24類型的值,表示該Tag的時間戳(單位為ms),第一個Tag的時間戳總是0。

第8個字節為時間戳的擴展字節,當24位數值不夠時,該字節作為最高位將時間戳擴展為32位值。

第9-11字節為UI24類型的值,表示stream id,總是0。

后面的字節為Tag Data數據,Data的大小由第2-4字節的數值指示,根據第1個字節指示的Tag類型,按照不同的結構解析Tag Data。下面分別介紹。

四、Audio Tag Data結構

音頻Tag開始的第1個字節包含了音頻數據的參數信息,從第2個字節開始為音頻流數據。

第1個字節的前4位的數值表示了音頻數據格式,各值代表的意義大家可以查閱Adobe公司發布的FLV格式說明文檔(可以到我的磁盤空間的“資料”目錄去下載 http://e.ys168.com/?tinyfun )。

第1個字節的第5-6位的數值表示采樣率,0 = 5.5 kHz,1 = 11 kHz,2 = 22 kHz,3 = 44 kHz。

第1個字節的第7位表示采樣精度,0 = 8bits,1 = 16bits。

第1個字節的第8位表示音頻類型,0 = mono,1 = stereo。

五、Video Tag Data結構

視頻Tag也用開始的第1個字節包含視頻數據的參數信息,從第2個字節開始為視頻流數據。

第1個字節的前4位的數值表示幀類型。

第1個字節的后4位的數值表示視頻編碼ID,1 = JPEG(現已不用),2 = Sorenson H.263,3 = Screen video,4 = On2 VP6,5 = On2 VP6 with alpha channel,6 = Screen video version 2。

六、Script Tag Data結構

該類型Tag又通常被稱為Metadata Tag,會放一些關于FLV視頻和音頻的參數信息,如duration、width、height等。通常該類型Tag會跟在File Header后面作為第一個Tag出現,而且只有一個。

一般來說,該Tag Data結構包含兩個AMF包。AMF(Action Message Format)是Adobe設計的一種通用數據封裝格式,在Adobe的很多產品中應用,簡單來說,AMF將不同類型的數據用統一的格式來描述。第一個AMF包封裝字符串類型數據,用來裝入一個“onMetaData”標志,這個標志與Adobe的一些API調用有,在此不細述。第二個AMF包封裝一個數組類型,這個數組中包含了音視頻信息項的名稱和值。具體說明如下,大家可以參照圖片上的數據進行理解。

第一個AMF包:

第1個字節表示AMF包類型,一般總是0x02,表示字符串,其他值表示意義請查閱文檔。

第2-3個字節為UI16類型值,表示字符串的長度,一般總是0x000A(“onMetaData”長度)。

后面字節為字符串數據,一般總為“onMetaData”。

第二個AMF包:

第1個字節表示AMF包類型,一般總是0x08,表示數組。

第2-5個字節為UI32類型值,表示數組元素的個數。

后面即為各數組元素的封裝,數組元素為元素名稱和值組成的對。表示方法如下:

第1-2個字節表示元素名稱的長度,假設為L。

后面跟著為長度為L的字符串。

第L+3個字節表示元素值的類型。

后面跟著為對應值,占用字節數取決于值的類型。

OK,到此FLV文件結構講完了,希望我已經講清楚了:)另外我自己寫了一個小工具,用它可以查看一個FLV文件的結構,并且能夠分析各個字段對應字節的具體值,截圖如下。目前還有一些小問題需要完善,后面我會加一個使用說明。想用的朋友可以到我磁盤空間的“工具”目錄去下載。( http://e.ys168.com/?tinyfun

FLV文件格式解析


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論