小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

FLV文件格式解析

 ShangShujie 2010-06-03

FLV文件格式解析

(2009-10-02 23:44:18)
標簽:

flv

tag

adobe

it

分類:工作•開發(fā)

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

    FLV視頻格式是Adobe公司設(shè)計開發(fā)的,目前已經(jīng)免費開放,現(xiàn)在的版本是v10。下面我們就了解一 下FLV文件格式。

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

FLV文件格式解析

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

FLV文件格式解析

 

一、File Header結(jié)構(gòu)

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

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

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

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

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

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

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

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

 

二、Previous Tag Size結(jié)構(gòu)

    如圖中紅色位置所示。

 

三、Tag結(jié)構(gòu)

    Tag包括Tag Header和Tag Data兩部分。不同類型的Tag的Header結(jié)構(gòu)是相同的,但是Data結(jié)構(gòu)各不相同。如圖中綠色和黃色區(qū)域分別表示Tag Header數(shù)據(jù)和Tag Data數(shù)據(jù)。

    當前版本的Tag Header結(jié)構(gòu)占用11個字節(jié)。

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

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

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

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

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

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

 

四、Audio Tag Data結(jié)構(gòu)

    音頻Tag開始的第1個字節(jié)包含了音頻數(shù)據(jù)的參數(shù)信息,從第2個字節(jié)開始為音頻流數(shù)據(jù)。

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

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

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

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

 

五、Video Tag Data結(jié)構(gòu)

    視頻Tag也用開始的第1個字節(jié)包含視頻數(shù)據(jù)的參數(shù)信息,從第2個字節(jié)開始為視頻流數(shù)據(jù)。

    第1個字節(jié)的前4位的數(shù)值表示幀類型。

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

 

六、Script Tag Data結(jié)構(gòu)

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

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

 

    第一個AMF包:

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

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

       后面字節(jié)為字符串數(shù)據(jù),一般總為“onMetaData”。

 

    第二個AMF包:

       第1個字節(jié)表示AMF包類型,一般總是0x08,表示數(shù)組。

       第2-5個字節(jié)為UI32類型值,表示數(shù)組元素的個數(shù)。

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

       第1-2個字節(jié)表示元素名稱的長度,假設(shè)為L。

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

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

       后面跟著為對應值,占用字節(jié)數(shù)取決于值的類型。

 

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

FLV文件格式解析

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多