天天看點

開源實時視訊碼流分析軟體:VideoEye

 本文介紹一個自己做的碼流分析軟體:VideoEye。為什麼要起這個名字呢?感覺這個軟體的主要功能就是對“視訊”進行“分析”。而分析是要用眼睛來看的,是以取了“視訊”和“分析”這兩個詞的英文,名之曰:VideoEye。這個軟體是在自己畢業設計軟體的基礎上改的。可以對本地檔案或者網際網路視訊流進行實時的碼流分析。由于這個軟體是自己一邊學習視音頻技術一邊制作的,是以涵蓋了比較全面的功能。在編寫這個軟體的過程中,自己也學會了很多的視音頻編解碼方面的知識,以及MFC的知識。後來想想,與其自己儲存在電腦裡,不如開源出來與大家分享,也許能幫助正在學習視音頻技術的人學習這方面的知識。軟體源代碼中有大量的注釋,都是自己邊學邊記的筆記,十分友善了解和學習有關的知識。

開發環境為VC2010,軟體界面使用以下類庫:

界面:MFC

視音頻編解碼類庫:FFMPEG

視訊非壓縮域資料分析:OpenCV

播放清單解析/導出:TinyXML

視音頻播放:SDL

目前還在完善過程中,估計還要不少的修改。

項目首頁

SourceForge:https://sourceforge.net/projects/videoeye/

Github:https://github.com/leixiaohua1020/VideoEye

開源中國:http://git.oschina.net/leixiaohua1020/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拷貝到程式的目錄中

下面将自己總結的軟體的文檔貼出來。

開源實時視訊碼流分析軟體:VideoEye

1 簡述

VideoEye是一個開源的視訊分析的軟體。本軟體可以播放和分析視訊資料。它支援多種視訊流輸入方式:HTTP,RTMP,RTSP以及檔案等等。該軟體可以實時分析視訊流并能以圖形化的方式呈現其分析結果。目前該軟體還處于完善階段。

1.1 視訊播放

視訊播放是本軟體最基本的功能。

1.2 壓縮域碼流分析

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

1.3 非壓縮域資料分析

非壓縮域資料分析主要用于分析視訊解碼後的像素資料。

2 主界面

本章簡單介紹系統主界面的操作和使用。

軟體運作後歡迎畫面如圖所示:

開源實時視訊碼流分析軟體:VideoEye

圖2-1.歡迎畫面

進入主界面以後,如下圖所示。

開源實時視訊碼流分析軟體:VideoEye

圖2-2.主界面

如果想讓系統開始運作的話,首先需要選擇一個視訊(音頻)檔案。将視訊所在的URL粘貼到“輸入路徑”裡面即可。

注1:還可以通過以下幾種方式添加輸入路徑

1. 單擊“檔案”,打開檔案對話框,選擇一個視訊檔案

2. 拖拽一個視訊檔案到主界面

3. 單擊“收藏夾”,打開收藏夾清單,選擇一個視訊的URL

注2:本系統不但支援本地檔案的分析,也支援網絡流的分析。

在這裡我們選擇一個視訊檔案,URL是“F:\movie\cuc_ieschool.flv”。

單擊位于主界面左下角的“播放”大按鈕(一個圓圈裡面有一個三角形),即可讓系統開始運作。系統運作後的截圖如下圖所示。

開源實時視訊碼流分析軟體:VideoEye

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

由圖可見,在“輸入參數”部分,系統解析出了輸入協定類型為file,封裝格式為FLV。比特率是394.94kbps,時長是34s。 “視訊”部分,系統解析出了輸出像素格式為YUV420P,視訊編碼方式為H.264,幀率為15fps,畫面大小為512x288。“音頻”部分,系統解析出了采樣率為44100Hz,音頻編碼方式為MP3,聲道數為2。

單擊主界面下方的“播放控制”面闆上的按鈕,可以控制視訊的播放。具體的功能包含快退,暫停,快進,停止,逐幀播放,全屏播放。拖動視訊播放的進度條,則可以控制視訊播放的進度(對于直播信号,是不能調整播放進度的)。

系統開始運作之後,會彈出視訊播放視窗。該視窗類似于視訊播放器,可以顯示解碼後的視訊資料,并播放音頻資料。

開源實時視訊碼流分析軟體:VideoEye

圖2-4.播放視窗

3 播放

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

3.1 視訊URL

如果想讓系統開始播放的話,首先需要選擇一個視訊(音頻)檔案。将視訊所在的URL粘貼到“輸入路徑”裡面即可。

注1:還可以通過以下幾種方式添加輸入路徑

1. 單擊“檔案”,打開檔案對話框,選擇一個視訊檔案

2. 拖拽一個視訊檔案到主界面

3. 單擊“收藏夾”,打開收藏夾清單,選擇一個視訊的URL

4. 單擊“位址解析”,可以使用網絡上現有的位址解析引擎,解析得到像優酷,洋芋,樂視這些網站上視訊的URL。

注2:本系統不但支援本地檔案的分析,也支援網絡流的分析。

3.2 收藏夾

收藏夾功能目前還處于調整中。支援導入m3u格式的播放清單,以及XSPF格式的播放清單。輕按兩下收藏夾中的條目,可以将該條目對應的位址傳給主界面的“輸入路徑”。

開源實時視訊碼流分析軟體:VideoEye

圖3-1.播放清單對話框

3.3 播放控制

在“輸入路徑”裡添加視訊的URL之後,單擊系統左下角的“播放”大按鈕(一個圓圈裡面有一個三角形),就可以開始播放了。

在“播放”按鈕的旁邊,排列着其它控制播放的按鈕。依次是:“後退”,“暫停”,“前進”,“停止”,“逐幀播放”,“全屏”。通過這些按鈕,基本上可以完成對播放的各種控制。此外,在這些按鈕的上方,還有一個播放的進度條。可以通過拖拽進度條的方式,調整視訊播放的進度。

在系統的右下角,有一個按鈕:“關于”。

開源實時視訊碼流分析軟體:VideoEye

圖3-2.播放控制按鈕

3.4 播放設定

選擇菜單的“播放”->“播放器首選項”。打開播放設定對話框如圖所示。

注:此處的設定隻有在下一次視訊播放開始後才會生效。 

開源實時視訊碼流分析軟體:VideoEye

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

3.5 播放畫面

選擇菜單的“視訊”->“大小”。可以調整視訊播放視窗的大小。

選擇菜單的“視訊”->“縱橫比”。可以調整視訊播放視窗的縱橫比。

選擇菜單的“視訊畫面”,可以調整視訊播放視窗顯示的内容,有以下3種:

* 視訊畫面

* 音頻波形圖

* 音頻離散傅裡葉變換圖

3.6 資料輸出

選擇菜單的“資料”。可以輸出視訊播放過程中的中間資料。該頁籤可以用于輸出視音頻碼流資料,視訊解碼後的像素資料,或者音頻解碼後的采樣資料。資料輸出頁籤如下圖所示。

注:特殊容器(mp4,mkv等)封裝的H.264直接輸出的話,會缺少SPS和PPS,因而導緻碼流無法被識别。為此專門添加了特殊容器輸出H.264的選項。

開源實時視訊碼流分析軟體:VideoEye

圖3-4.資料輸出對話框

4 視訊分析

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

4.1 視訊解碼分析

在視訊播放的過程中,單擊主界面視訊部分編碼參數部分的按鈕“視訊解碼分析”,打開視訊解碼分析對話框,如圖4-1所示。

對話框中包含了一個幀清單。每個幀對應清單中的一條記錄。不同類型的幀有着不同的背景色。清單顯示了以下資訊:

* 幀數

* 幀類型

* 關鍵幀

* 碼流順序

* PTS

開源實時視訊碼流分析軟體:VideoEye

圖4-1.視訊解碼分析對話框

4.2 視訊幀解碼分析

在視訊播放的過程中,單擊主界面視訊部分編碼參數部分的按鈕“單幀詳細分析”,打開視訊幀解碼分析對話框,如圖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的最大值,最小值以及平均值。

此外,如果勾選了“随播放自動分析”選項,可以随着系統對視訊的解碼播放,實時的分析視訊的碼流參數。

開源實時視訊碼流分析軟體:VideoEye

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

量化參數分析結果如圖所示。視訊幀被劃分成以宏塊為機關的網格狀。圖中每個小方塊代表視訊碼流中的一個宏塊。其中的數字代表了該宏塊的量化參數。為了使分析結果更加直覺,每個宏塊被标記以不同灰階的背景色,如圖4-3(a)所示。量化系數越大,相應的背景色的灰階越淺。此外,也可以以視訊幀的内容為背景顯示分析結果,如圖4-3(b)所示。也可以去掉量化系數的顯示,如圖4-3(c)所示。

開源實時視訊碼流分析軟體:VideoEye

(a) 背景為灰階圖,前景為量化參數  

開源實時視訊碼流分析軟體:VideoEye

(b) 背景為幀内容,前景為量化參數  

開源實時視訊碼流分析軟體:VideoEye

(c) 背景為灰階,前景不包含數字 圖4-3.量化參數分析結果

宏塊類型分析的結果如圖4-4所示。視訊幀同樣被劃分成以宏塊為機關的網格狀。根據子宏塊劃分方式的不同(16x16,16x8,8x16,8x8,4x4),這些宏塊被劃分成了不同樣式。不同的宏塊可以被标記以不同的背景顔色,如圖4-4(a)所示。此外,如果該宏塊屬于跳過宏塊,還可以在宏塊上面标記以“s”字樣。此外,也可以以視訊幀的内容為背景顯示分析結果,如圖4-4(b)所示。

開源實時視訊碼流分析軟體:VideoEye

(a) 背景為純色圖,前景為宏塊類型  

開源實時視訊碼流分析軟體:VideoEye

(b) 背景為幀内容,前景為宏塊劃分方式 圖4-4.宏塊類型分析結果

運動矢量分析的結果如圖4-5所示。運動矢量分為List0和List1兩種。由圖可見,運動較劇烈的地方,包含了較多的長度較長的運動矢量。畫面相對靜止的地方,運動矢量的長度相對比較短甚至取值為0。

開源實時視訊碼流分析軟體:VideoEye

(a) List0  

開源實時視訊碼流分析軟體:VideoEye

(b) List1 圖4-5. 運動矢量分析結果

參考幀的分析結果如圖4-6所示。參考幀分為List0和List1兩種。由圖可見,不同的宏塊參考了不同的視訊幀作為其參考幀。

開源實時視訊碼流分析軟體:VideoEye

(a) List0  

開源實時視訊碼流分析軟體:VideoEye

(b) List1 圖4-6. 參考幀分析結果

4.3 視訊非壓縮域分析

在視訊播放的過程中,單擊主界面視訊參數部分的按鈕“非壓縮域資料分析”,打開非壓縮域資料分析對話框,如圖4-7所示。由圖可見,可以從“分析方法”裡面選擇想要分析的内容,包含了顔色直方圖,Canny邊緣檢測,輪廓檢測,離散傅裡葉變換,人臉識别。此外,還可以檢視視訊的R,G,B分量以及Y,U,V分量。如果勾選了“随着播放自動分析” 選項的話,可以随着系統對視訊的解碼播放,實時的分析視訊的非壓縮域資料。

開源實時視訊碼流分析軟體:VideoEye

圖4-7.非壓縮域分析 顔色直方圖的分析結果如圖4-8所示。由圖可見,顔色直方圖列出了不同色彩在整幅視訊幀中所占的比例。對于該視訊幀來說,紅色和黃色分量取值較大,代表該種色彩所占比重較大。

開源實時視訊碼流分析軟體:VideoEye

圖4-8.顔色直方圖

邊緣檢測的分析結果如圖4-9所示。通過該分析功能可以獲得視訊幀的邊緣資訊。

開源實時視訊碼流分析軟體:VideoEye

圖4-9.邊緣檢測

輪廓檢測的結果如圖4-10所示。通過該分析功能可以獲得視訊幀的輪廓資訊。

開源實時視訊碼流分析軟體:VideoEye

圖4-10.輪廓檢測

離散傅裡葉變換的分析結果如圖4-11所示。左邊的圖像為相位譜,中間的圖像為亮度圖,右邊的圖像為幅度譜。

開源實時視訊碼流分析軟體:VideoEye

圖4-11.離散傅裡葉變換

人臉識别的分析結果如圖4-12所示。通過該功能可以分析出視訊幀中的人臉資訊。

開源實時視訊碼流分析軟體:VideoEye

圖4-12.人臉識别

R,G,B分量的分析結果如圖4-13所示。由圖可以檢視R,G,B三個分量的取值情況。

開源實時視訊碼流分析軟體:VideoEye

圖4-13. R(左上),G(右上),B(下)分量

Y,U,V分量的分析結果如圖4-14所示。由于Y:U:V取樣格式是4:2:0的,是以U,V分量的分辨率是Y分量的一半。

開源實時視訊碼流分析軟體:VideoEye

圖4-14. Y(左上),U(右上),V(下)分量

5 音頻分析

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

5.1 音頻解碼分析

在視訊播放的過程中,單擊主界面音頻編碼參數部分的按鈕“音頻解碼分析”,打開音頻解碼分析對話框,如圖5-1所示。

對話框左邊是解碼狀态表,表中顯示了音頻碼流的情況。每個音頻幀對應一個柱狀圖。橫坐标對應音頻幀序号,縱坐标對應音頻幀大小。

對話框右邊對應的是幀清單。清單顯示了以下資訊:

* 幀數

* 幀大小

* PTS

* DTS

開源實時視訊碼流分析軟體:VideoEye

圖5-1. 音頻解碼分析

6 其他功能

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

6.1 多國語言的支援

本軟體目前支援簡體中文和英文兩種界面。英文界面示例如圖6-1, 圖6-2, 圖6-3, 圖6-4所示。

開源實時視訊碼流分析軟體:VideoEye

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

開源實時視訊碼流分析軟體:VideoEye

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

開源實時視訊碼流分析軟體:VideoEye

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

開源實時視訊碼流分析軟體:VideoEye

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

6.2 專用分析工具

專用分析工具還未加入。

6.3 輔助工具

目前支援的輔助工具是MediaInfo,用于檢視視訊資訊,如圖6-5所示。

開源實時視訊碼流分析軟體:VideoEye

圖6-5.MediaInfo界面