日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FLV封装格式分析器

發布時間:2024/2/28 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FLV封装格式分析器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

=====================================================
視音頻編解碼學習工程系列文章列表:

視音頻編解碼學習工程:H.264分析器

視音頻編解碼學習工程:AAC格式分析器

視音頻編解碼學習工程:FLV封裝格式分析器

視音頻編解碼學習工程:TS封裝格式分析器

視音頻編解碼學習工程:JPEG分析器

=====================================================

本文介紹一個自己的開源小項目:FLV封裝格式分析器。FLV全稱是Flash Video,是互聯網上使用極為廣泛的視頻封裝格式。像Youtube,優酷這類視頻網站,都使用FLV封裝視頻。我這個項目規模不大,主要可以用來學習FLV封裝格式結構。此外它還支持分離FLV中的視頻流和音頻流。使用VC 2010的MFC開發完成。在對FLV進行視音頻分離的過程中,用到了一個Github開源小工程:flvparse。在此插一句:我發現Github上優秀的東西真的還是挺多的,許多零散的小工程,效果都很不錯。這個flvparse做的就不錯。

軟件的exe以及源代碼已經上傳到了SourceForge上。和之前的H.264碼流分析器一樣,增加了一個英文界面,緊跟國際潮流~

項目地址:https://sourceforge.net/projects/flvformatanalysis/

CSDN下載地址(程序+源代碼):http://download.csdn.net/detail/leixiaohua1020/6838805

?

更新記錄==============================

1.1版(2014.7.8)

?* 更換了界面

?* 原工程支持Unicode編碼

?* 支持中英文切換

CSDN源代碼:http://download.csdn.net/detail/leixiaohua1020/7767613

PUDN源代碼:http://www.pudn.com/downloads644/sourcecode/multimedia/detail2605189.html

?

軟件使用介紹

軟件的使用相當簡單。

軟件運行后,首先打開一個FLV文件。單擊“開始”,可以解析出一系列Tag,列表顯示在軟件右側,不同種類的Tag被標記成了不同的顏色。軟件的左側,顯示了FLV文件頭信息,以及Tag頭信息。

英文界面

注:如果勾選上“輸出視頻”,“輸出音頻”的話,可以輸出分離后的視頻流和音頻流。在這里要注意的是音頻支持MP3格式,AAC格式貌似有點問題。

?

軟件源代碼簡析

源代碼方面和普通的MFC程序差不太多,懂得MFC的人應該很快就能看懂。唯一比較特殊的地方,就在于對開源項目flvparse進行了一些改動,在此就不細說了。注釋方面還是很充分的。

?

如果有什么使用問題,可以反饋給我,以后有時間進行修改升級。

?

更新(2014.8.12)================================

FLV封裝原理

FLV格式的封裝原理,貼上來輔助學習之用。

?

?

FLV(Flash Video)是Adobe公司設計開發的一種流行的流媒體格式,由于其視頻文件體積輕巧、封裝簡單等特點,使其很適合在互聯網上進行應用。此外,FLV可以使用Flash Player進行播放,而Flash Player插件已經安裝在全世界絕大部分瀏覽器上,這使得通過網頁播放FLV視頻十分容易。目前主流的視頻網站如優酷網,土豆網,樂視網等網站無一例外地使用了FLV格式。FLV封裝格式的文件后綴通常為“.flv”。

總體上看,FLV包括文件頭(File Header)和文件體(File Body)兩部分,其中文件體由一系列的Tag組成。因此一個FLV文件是如圖1結構。

圖1.文件結構(簡圖)

其中,每個Tag前面還包含了Previous Tag Size字段,表示前面一個Tag的大小。Tag的類型可以是視頻、音頻和Script,每個Tag只能包含以上三種類型的數據中的一種。圖2展示了FLV文件的詳細結構。

圖2.FLV文件結構(詳圖)

下面詳細介紹一下三種Tag的Tag Data部分的結構。

(a)Audio Tag Data結構(音頻Tag)

音頻Tag開始的第1個字節包含了音頻數據的參數信息,從第2個字節開始為音頻流數據。結構如圖3所示。

圖3.Audio Tag Data結構

第1個字節的前4位的數值表示了音頻編碼類型。如表1所示。

表1.音頻編碼類型

含義

0

?Linear PCM,platform endian

1

?ADPCM

2

?MP3

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

14

?MP3 8-Khz

15

?Device-specific sound

第1個字節的第5-6位的數值表示音頻采樣率。如表2所示。

表2.音頻采樣率

含義

0

?5.5kHz

1

?11KHz

2

?22 kHz

3

?44 kHz

PS:從上表可以發現,FLV封裝格式并不支持48KHz的采樣率。

第1個字節的第7位表示音頻采樣精度。如表3所示。

表3.音頻采樣精度

含義

0

?8bits

1

?16bits

第1個字節的第8位表示音頻類型。

表4.?音頻類型

含義

0

?sndMono

1

?sndStereo

(b)Video Tag Data結構(視頻Tag)

視頻Tag也用開始的第1個字節包含視頻數據的參數信息,從第2個字節為視頻流數據。結構如圖4所示。

圖4.Video Tag Data結構

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

表5.幀類型

含義

1

?keyframe (for AVC,a seekable frame)

2

?inter frame (for AVC,a nonseekable frame)

3

?disposable inter frame (H.263 only)

4

?generated keyframe (reserved for server use)

5

?video info/command frame

第1個字節的后4位的數值表示視頻編碼類型。如表6所示。

表6.視頻編碼類型

含義

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

?AVC

(c)Script Tag Data結構(控制幀)

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

圖5.Script Tag Data結構

第一個AMF包:

第1個字節表示AMF包類型,一般總是0x02,表示字符串。第2-3個字節為UI16類型值,標識字符串的長度,一般總是0x000A(“onMetaData”長度)。后面字節為具體的字符串,一般總為“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。

第二個AMF包:

第1個字節表示AMF包類型,一般總是0x08,表示數組。第2-5個字節為UI32類型值,表示數組元素的個數。后面即為各數組元素的封裝,數組元素為元素名稱和值組成的對。常見的數組元素如表7所示。

表7.常見MetaData

含義

duration

?時長

width

?視頻寬度

height

?視頻高度

videodatarate

?視頻碼率

framerate

?視頻幀率

videocodecid

?視頻編碼方式

audiosamplerate

?音頻采樣率

audiosamplesize

?音頻采樣精度

stereo

?是否為立體聲

audiocodecid

?音頻編碼方式

filesize

?文件大小

總結

以上是生活随笔為你收集整理的FLV封装格式分析器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。