開源實時視頻碼流分析軟件:VideoEye

 本文介紹一個本身作的碼流分析軟件:VideoEye。爲何要起這個名字呢?感受這個軟件的主要功能就是對「視頻」進行「分析」。而分析是要用眼睛來看的,所以取了「視頻」和「分析」這兩個詞的英文,名之曰:VideoEye。這個軟件是在本身畢業設計軟件的基礎上改的。可以對本地文件或者互聯網視頻流進行實時的碼流分析。由於這個軟件是本身一邊學習視音頻技術一邊製做的,因此涵蓋了比較全面的功能。在編寫這個軟件的過程當中,本身也學會了很是多的視音頻編解碼方面的知識,以及MFC的知識。後來想一想,與其本身保存在電腦裏,不如開源出來與你們分享,或許能幫助正在學習視音頻技術的人學習這方面的知識。軟件源碼中有大量的凝視,都是本身邊學邊記的筆記,十分方便理解和學習有關的知識。html

開發環境爲VC2010,軟件界面使用下面類庫:網絡

界面:MFCide

視音頻編解碼類庫:FFMPEG工具

視頻非壓縮域數據分析:OpenCV學習

播放列表解析/導出:TinyXML字體

視音頻播放:SDL編碼

眼下還在無缺過程當中,預計還要很多的改動。spa


項目主頁:.net

https://sourceforge.net/projects/videoeye
設計


0.1測試版=================================

CSDN源碼下載

http://download.csdn.net/detail/leixiaohua1020/7552669

CSDN編譯好的可執行程序下載(眼下僅僅在本機上測過)

http://download.csdn.net/detail/leixiaohua1020/7552687

注:暈了,上面2個上傳至CSDN的文件都缺失了3個OpenCV的Dll,編譯或者執行的時候會提示找不到Dll。由於CSDN上傳的資源沒有提供刪除功能,僅僅能再上傳一個壓縮包補齊相關的Dll。下面的Dll和其餘Dll放到一塊兒就可以了:

http://download.csdn.net/detail/leixiaohua1020/7555063


0.2測試版(2014.7.12)======================

相比於0.1測試版,作了下面幾個部分的無缺:

* 源碼加入了對Unicode的支持

* 加入了兩個宏定義"INT64_MIN INT64_MAX",在沒有安裝 Win7SDK的狀況下,可能會出現找不到定義的狀況。

* 改變了「收藏夾」的外觀,改動了其展示視頻地址的樹形結構,使其美觀一些。

* 「單幀具體分析」界面添加了數據輸出功能。可以將一幀視頻碼流的量化參數(Quantization Parameter),宏塊類型(MacroBlock Type),運動矢量(Motion Vector),參考幀(Reference Frame)列表輸出出來並存儲爲「.csv」格式的文件。

* 修正了「單幀具體分析」中運動矢量分析功能在分析MPEG4視頻碼流時候的一個BUG。

* 修正了「視頻播放窗體」調整窗體大小的時候,會殘留視頻幀畫面的BUG。


SourceForge上已經更新至0.2版。


CSDN源碼下載

http://download.csdn.net/detail/leixiaohua1020/7624137

CSDN編譯好的可執行程序下載

http://download.csdn.net/detail/leixiaohua1020/7624119

PUDN源碼

http://www.pudn.com/downloads644/sourcecode/multimedia/detail2605176.html


注:需要VC2010的執行環境。假設出現找不到msvcp100.dll等文件的話,可以選擇下面之中的一個:

1.安裝Microsoft Visual C++ 2010 Redistributable Package 

2.下載壓縮包「VC2010編譯的MFC程序需要的dll」,並且將裏面的Dll複製到程序的文件夾中


下面將本身總結的軟件的文檔貼出來。


1 簡述

VideoEye是一個開源的視頻分析的軟件。本軟件可以播放和分析視頻數據。它支持多種視頻流輸入方式:HTTP,RTMP,RTSP以及文件等等。該軟件可以實時分析視頻流並能以圖形化的方式呈現其分析結果。眼下該軟件還處於無缺階段。

1.1 視頻播放

視頻播放是本軟件最主要的功能。

1.2 壓縮域碼流分析

壓縮域碼流分析主要用於分析視頻和音頻壓縮碼流的參數。

1.3 非壓縮域數據分析

非壓縮域數據分析主要用於分析視頻解碼後的像素數據。

2 主界面

本章簡介系統主界面的操做和使用。

軟件執行後歡迎畫面如圖所看到的:


 
圖2-1.歡迎畫面

進入主界面之後,例如如下圖所看到的。


 
圖2-2.主界面

假設想讓系統開始執行的話,首先需要選擇一個視頻(音頻)文件。將視頻所在的URL粘貼到「輸入路徑」裏面就能夠。
注1:還可以經過下面幾種方式加入輸入路徑
1. 單擊「文件」,打開文件對話框,選擇一個視頻文件
2. 拖拽一個視頻文件到主界面
3. 單擊「收藏夾」,打開收藏夾列表,選擇一個視頻的URL
注2:本系統不但支持本地文件的分析,也支持網絡流的分析。


在這裏咱們選擇一個視頻文件,URL是「F:\movie\cuc_ieschool.flv」。

單擊位於主界面左下角的「播放」大button(一個圓圈裏面有一個三角形),就可讓系統開始執行。系統執行後的截圖例如如下圖所看到的。


 

圖2-3.主界面(播放中)


由圖可見,在「輸入參數」部分,系統解析出了輸入協議類型爲file,封裝格式爲FLV。比特率是394.94kbps,時長是34s。 「視頻」部分,系統解析出了輸出像素格式爲YUV420P,視頻編碼方式爲H.264,幀率爲15fps,畫面大小爲512x288。「音頻」部分,系統解析出了採樣率爲44100Hz,音頻編碼方式爲MP3,聲道數爲2。
單擊主界面下方的「播放控制」面板上的button,可以控制視頻的播放。具體的功能包括快退,暫停,快進,中止,逐幀播放,全屏播放。拖動視頻播放的進度條,則可以控制視頻播放的進度(對於直播信號,是不能調整播放進度的)。

系統開始執行以後,會彈出視頻播放窗體。該窗體類似於視頻播放器,可以顯示解碼後的視頻數據,並播放音頻數據。


 
圖2-4.播放窗體

3 播放

本章主要介紹和視頻播放相關的功能。播放是本系統最主要的功能。系統其餘功能都是創建在播放的基礎之上的。

3.1 視頻URL

假設想讓系統開始播放的話,首先需要選擇一個視頻(音頻)文件。將視頻所在的URL粘貼到「輸入路徑」裏面就能夠。
注1:還可以經過下面幾種方式加入輸入路徑
1. 單擊「文件」,打開文件對話框,選擇一個視頻文件
2. 拖拽一個視頻文件到主界面
3. 單擊「收藏夾」,打開收藏夾列表,選擇一個視頻的URL
4. 單擊「地址解析」,可以使用網絡上現有的地址解析引擎,解析獲得像優酷,土豆,樂視這些站點上視頻的URL。
注2:本系統不但支持本地文件的分析,也支持網絡流的分析。

3.2 收藏夾

收藏夾功能眼下還處於調整中。支持導入m3u格式的播放列表,以及XSPF格式的播放列表。雙擊收藏夾中的條目,可以將該條目相應的地址傳給主界面的「輸入路徑」。


 
圖3-1.播放列表對話框

3.3 播放控制

在「輸入路徑」里加入視頻的URL以後,單擊系統左下角的「播放」大button(一個圓圈裏面有一個三角形),就可以開始播放了。
在「播放」button的旁邊,排列着其餘控制播放的button。依次是:「後退」,「暫停」,「前進」,「中止」,「逐幀播放」,「全屏」。經過這些button,基本上可以完畢對播放的各類控制。此外,在這些button的上方,另外一個播放的進度條。可以經過拖拽進度條的方式,調整視頻播放的進度。

在系統的右下角,有一個button:「關於」。


 
圖3-2.播放控制button

3.4 播放設置

選擇菜單的「播放」->「播放器首選項」。打開播放設置對話框如圖所看到的。

注:此處的設置僅僅有在下一次視頻播放開始後纔會生效。 


 
圖3-3.播放器首選項對話框

3.5 播放畫面

選擇菜單的「視頻」->「大小」。可以調整視頻播放窗體的大小。
選擇菜單的「視頻」->「縱橫比」。可以調整視頻播放窗體的縱橫比。
選擇菜單的「視頻畫面」,可以調整視頻播放窗體顯示的內容,有下面3種:
* 視頻畫面
* 音頻波形圖
* 音頻離散傅里葉變換圖

3.6 數據輸出

選擇菜單的「數據」。可以輸出視頻播放過程當中的中間數據。該選項卡可以用於輸出視音頻碼流數據,視頻解碼後的像素數據,或者音頻解碼後的採樣數據。數據輸出選項卡例如如下圖所看到的。

注:特殊容器(mp4,mkv等)封裝的H.264直接輸出的話,會缺乏SPS和PPS,於是致使碼流沒法被識別。爲此專門加入了特殊容器輸出H.264的選項。

 

 
圖3-4.數據輸出對話框

4 視頻分析

本章主要介紹和視頻分析相關的功能。

4.1 視頻解碼分析

在視頻播放的過程當中,單擊主界面視頻部分編碼參數部分的button「視頻解碼分析」,打開視頻解碼分析對話框,如圖4-1所看到的。
對話框中包括了一個幀列表。每個幀相應列表中的一條記錄。不一樣類型的幀有着不一樣的背景色。列表顯示了下面信息:
* 幀數
* 幀類型
* 關鍵幀
* 碼流順序
* PTS
 
圖4-1.視頻解碼分析對話框

4.2 視頻幀解碼分析

在視頻播放的過程當中,單擊主界面視頻部分編碼參數部分的button「單幀具體分析」,打開視頻幀解碼分析對話框,如圖4-2所看到的。
該部分主要用於對當前播放的視頻幀進行具體的分析。可以列表顯示視頻一幀的具體參數,包括:
* 幀數
* 幀類型
* PTS
* 顯示時間
* 參考幀數量
並可以對視頻進行宏塊級的分析,包括下面幾種參數的分析:
* 量化參數分析
* 宏塊類型分析
* 運動矢量list[0]分析
* 運動矢量list[1]分析
* 參考幀list[0]分析
* 參考幀list[1]分析

對話框上方的下拉框用於設置但願分析的內容。對話框左邊的「選項」部分可以設置分析結果的屬性。具體包括下面幾項:

表4-1.視頻幀具體分析選項

通用選項

顯示宏塊邊界

顯示視頻幀中宏塊的邊界。

字體

設置分析結果中文字的字體。

量化分析

顯示QP值

顯示宏塊的QP值。

顯示背景顏色

依據QP值的不一樣,不一樣宏塊顯示不一樣灰度的背景顏色。

宏塊類型分析

顯示子宏塊

顯示子宏塊的劃分方式。

顯示背景顏色

依據劃分方式的不一樣,不一樣宏塊顯示不一樣的背景顏色。

顯示跳過宏塊

在跳過宏塊的上方標記以「s」。

顯示參考列表

在使用參考幀的宏塊上標記List0和List1。

運動矢量[0]分析

顏色

顯示的運動矢量[0]顏色。

樣式

運動矢量[0]外觀。

運動矢量[1]分析

顏色

顯示的運動矢量[1]顏色。

樣式

運動矢量[1]外觀。




對話框中間的「宏塊類型」部分包括了各類類型的宏塊的數量的統計信息。好比幀內4x4,幀內16x16,16x16,16x8,8x16,8x8等類型的宏塊的個數。以及每行宏塊數,宏塊行數,總計宏塊數,每個宏塊包括的運動矢量個數等信息。
對話框右邊上方的「幀參數」部分包括了該視頻幀的一些其餘信息。好比幀數,幀類型,大小,PTS,顯示時間,參考幀數量等信息。
對話框右邊下方的「量化」部分包括了QP的統計信息。包括QP的最大值,最小值以及平均值。

此外,假設勾選了「隨播放本身主動分析」選項,可以隨着系統對視頻的解碼播放,實時的分析視頻的碼流參數。


 
圖4-2.視頻幀解碼分析對話框

量化參數分析結果如圖所看到的。視頻幀被劃分紅以宏塊爲單位的網格狀。圖中每個小方塊表明視頻碼流中的一個宏塊。當中的數字表明瞭該宏塊的量化參數。爲了使分析結果更加直觀,每個宏塊被標記以不一樣灰度的背景色,如圖4-3(a)所看到的。量化係數越大,相應的背景色的灰度越淺。此外,也可以以視頻幀的內容爲背景顯示分析結果,如圖4-3(b)所看到的。也可以去掉量化係數的顯示,如圖4-3(c)所看到的。


 
(a) 背景爲灰度圖,前景爲量化參數
 
(b) 背景爲幀內容,前景爲量化參數
 
(c) 背景爲灰度,前景不包括數字
圖4-3.量化參數分析結果

宏塊類型分析的結果如圖4-4所看到的。視頻幀相同被劃分紅以宏塊爲單位的網格狀。依據子宏塊劃分方式的不一樣(16x16,16x8,8x16,8x8,4x4),這些宏塊被劃分紅了不相同式。不一樣的宏塊可以被標記以不一樣的背景顏色,如圖4-4(a)所看到的。此外,假設該宏塊屬於跳過宏塊,還可以在宏塊上面標記以「s」字樣。此外,也可以以視頻幀的內容爲背景顯示分析結果,如圖4-4(b)所看到的。
 
(a) 背景爲純色圖,前景爲宏塊類型
 
(b) 背景爲幀內容,前景爲宏塊劃分方式
圖4-4.宏塊類型分析結果

運動矢量分析的結果如圖4-5所看到的。運動矢量分爲List0和List1兩種。由圖可見,運動較劇烈的地方,包括了較多的長度較長的運動矢量。畫面相對精巧的地方,運動矢量的長度相對照較短甚至取值爲0。
 
(a) List0
 
(b) List1
圖4-5. 運動矢量分析結果

參考幀的分析結果如圖4-6所看到的。參考幀分爲List0和List1兩種。由圖可見,不一樣的宏塊參考了不一樣的視頻幀做爲其參考幀。
 
(a) List0
 
(b) List1
圖4-6. 參考幀分析結果

4.3 視頻非壓縮域分析

在視頻播放的過程當中,單擊主界面視頻參數部分的button「非壓縮域數據分析」,打開非壓縮域數據分析對話框,如圖4-7所看到的。由圖可見,可以從「分析方法」裏面選擇想要分析的內容,包括了顏色直方圖,Canny邊緣檢測,輪廓檢測,離散傅里葉變換,人臉識別。此外,還可以查看視頻的R,G,B份量以及Y,U,V份量。假設勾選了「隨着播放本身主動分析」 選項的話,可以隨着系統對視頻的解碼播放,實時的分析視頻的非壓縮域數據。
 
圖4-7.非壓縮域分析
顏色直方圖的分析結果如圖4-8所看到的。由圖可見,顏色直方圖列出了不一樣色彩在整幅視頻幀中所佔的比例。對於該視頻幀來講,紅色和黃色份量取值較大,表明該種色彩所佔比重較大。
 
圖4-8.顏色直方圖

邊緣檢測的分析結果如圖4-9所看到的。經過該分析功能可以得到視頻幀的邊緣信息。
 
圖4-9.邊緣檢測

輪廓檢測的結果如圖4-10所看到的。經過該分析功能可以得到視頻幀的輪廓信息。
 
圖4-10.輪廓檢測

離散傅里葉變換的分析結果如圖4-11所看到的。左邊的圖像爲相位譜,中間的圖像爲亮度圖,右邊的圖像爲幅度譜。
 
圖4-11.離散傅里葉變換

人臉識別的分析結果如圖4-12所看到的。經過該功能可以分析出視頻幀中的人臉信息。
 
圖4-12.人臉識別

R,G,B份量的分析結果如圖4-13所看到的。由圖可以查看R,G,B三個份量的取值狀況。
 
圖4-13. R(左上),G(右上),B(下)份量

Y,U,V份量的分析結果如圖4-14所看到的。由於Y:U:V取樣格式是4:2:0的,因此U,V份量的分辨率是Y份量的一半。
 
圖4-14. Y(左上),U(右上),V(下)份量

5 音頻分析

本章主要介紹和音頻分析相關的功能。

5.1 音頻解碼分析

在視頻播放的過程當中,單擊主界面音頻編碼參數部分的button「音頻解碼分析」,打開音頻解碼分析對話框,如圖5-1所看到的。
對話框左邊是解碼狀態表,表中顯示了音頻碼流的狀況。每個音頻幀相應一個柱狀圖。橫座標相應音頻幀序號,縱座標相應音頻幀大小。
對話框右邊相應的是幀列表。列表顯示了下面信息:
* 幀數
* 幀大小
* PTS
* DTS


 
圖5-1. 音頻解碼分析


6 其餘功能

本章主要介紹系統的一些其餘的功能。

6.1 多國語言的支持

本軟件眼下支持中文簡體和英文兩種界面。英文界面示好比圖6-1, 圖6-2, 圖6-3, 圖6-4所看到的。

 
圖6-1. 主界面(英文)

 
圖6-2. 視頻解碼分析(英文)

 
圖6-3.視頻幀解碼分析(英文)

 
圖6-4.視頻非壓縮域分析(英文)




6.2 專用分析工具

專用分析工具還未加入。

6.3 輔助工具

眼下支持的輔助工具是MediaInfo,用於查看視頻信息,如圖6-5所看到的。


 
圖6-5.MediaInfo界面
相關文章
相關標籤/搜索