FLV檔案(H264 + AAC)格式超詳細分析

來源:互聯網
上載者:User
最近自己動手將H264視頻流和AAC音頻流合成flv檔案,但是沒有採用開源的ffmpeg的api來處理音視頻流。方法就是模仿ffmpeg中libavformat/flvenc.c 檔案寫代碼來完成音視頻的flv格式封裝。在這個封裝過程中,需要非常清楚flv檔案格式。網上有關flv檔案格式的資料非常多,不過大部分資料是互相轉載或者缺乏足夠詳細的資訊(例如:AVDecoderConfigurationRecord和 AudioSpecificConfig的產生)。 因此我就以ffmpeg中libavformat/flvenc.c為基礎分析flv檔案的構成,詳細分析flv檔案中每個位元組的含義。以下每個方格代表一個位元組。其中的數字都是16進位表示(省略0x),格中的字元也可以用相應的16進位數字替代,用字元表示有時候更為直觀。假定flv檔案同時含有視頻和音頻。
接下來就是Metadata的具體資料,由兩個AMF包組成。
Metadata元素個數暫訂為12個 = 音頻5個 + 視頻5個 + 2個(duration和filesize)。 後面還可能會加入其它元素,因此會返回來修改此值。metadata元素的順序不固定,此處採用ffmpeg中的順序。 第二個AMF包中各數組元素封裝形式為:前兩個位元組是元素名稱的長度;後面跟著長度為L的字串;第L+3個位元組表示元素值的類型;後面跟著是對應值,佔用的位元組數取決於值的類型。 以下的(tag->key,tag->value)不一定在所有flv檔案中出現,依據不同版本有所不同。   Remark:以上將flv官方文檔的metadata資訊寫入了Script Tag中。但是在做flv檔案合成的時候,發現網上有的flv檔案將keyframes資訊隱藏在Script Tag中。後來通過網路查一些資料,發現keyframes幾乎是一個非官方的標準,也就是民間標準。  兩個常用的操作metadata的工具是flvtool2和FLVMDI, 都是把keyframes作為一個預設的元資訊項目。在FLVMDI的首頁(http://www.buraks.com/flvmdi/)上有描述: keyframes: (Object) This object is added only if you specify the /k switch. 'keyframes' is known to FLVMDI and if /k switch is not specified, 'keyframes' object will be deleted. 'keyframes' object has 2 arrays: 'filepositions' and 'times'. Both arrays have the same number of elements, which is equal to the number of key frames in the FLV. Values in times array are in 'seconds'. Each correspond to the timestamp of the n'th key frame. Values in filepositions array are in 'bytes'. Each correspond to the fileposition of the nth key frame video tag (which starts with byte tag type 9). 也就是說keyframes中包含著2個內容 'filepositions' and 'times'分別指的是主要畫面格的檔案位置和主要畫面格的PTS。通過keyframes可以建立起自己的Index,然後再seek和快進快退的操作中,快速有效跳轉到你想要找的主要畫面格位置進行處理。






到此為止已經介紹完flv檔案格式,flv格式還是比較簡單的,header部分很簡潔,body部分都是由一個個tag組成,tag的話也就三種,指令碼tag一般只有一個。最後用一個簡單的圖來概括flv檔案格式,以結束本文檔。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.