本文介紹一個自己做的碼流分析軟件: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拷貝到程序的目錄中
下面將自己總結的軟件的文檔貼出來。
1 簡述
VideoEye是一個開源的視頻分析的軟件。本軟件可以播放和分析視頻數據。它支持多種視頻流輸入方式:HTTP,RTMP,RTSP以及文件等等。該軟件可以實時分析視頻流並能以圖形化的方式呈現其分析結果。目前該軟件還處於完善階段。1.1 視頻播放
視頻播放是本軟件最基本的功能。1.2 壓縮域碼流分析
壓縮域碼流分析主要用於分析視頻和音頻壓縮碼流的參數。1.3 非壓縮域數據分析
非壓縮域數據分析主要用於分析視頻解碼後的像素數據。2 主界面
本章簡單介紹系統主界面的操作和使用。軟件運行後歡迎畫面如圖所示:
進入主界面以後,如下圖所示。
注1:還可以通過以下幾種方式添加輸入路徑
1. 單擊“文件”,打開文件對話框,選擇一個視頻文件
2. 拖拽一個視頻文件到主界面
3. 單擊“收藏夾”,打開收藏夾列表,選擇一個視頻的URL
注2:本系統不但支持本地文件的分析,也支持網絡流的分析。
單擊位於主界面左下角的“播放”大按鈕(一個圓圈裏面有一個三角形),即可讓系統開始運行。系統運行後的截圖如下圖所示。
圖2-3.主界面(播放中)
單擊主界面下方的“播放控制”面板上的按鈕,可以控制視頻的播放。具體的功能包含快退,暫停,快進,停止,逐幀播放,全屏播放。拖動視頻播放的進度條,則可以控制視頻播放的進度(對於直播信號,是不能調整播放進度的)。
系統開始運行之後,會彈出視頻播放窗口。該窗口類似於視頻播放器,可以顯示解碼後的視頻數據,並播放音頻數據。
3 播放
本章主要介紹和視頻播放相關的功能。播放是本系統最基本的功能。系統其它功能都是建立在播放的基礎之上的。3.1 視頻URL
如果想讓系統開始播放的話,首先需要選擇一個視頻(音頻)文件。將視頻所在的URL粘貼到“輸入路徑”裏面即可。注1:還可以通過以下幾種方式添加輸入路徑
1. 單擊“文件”,打開文件對話框,選擇一個視頻文件
2. 拖拽一個視頻文件到主界面
3. 單擊“收藏夾”,打開收藏夾列表,選擇一個視頻的URL
4. 單擊“地址解析”,可以使用網絡上現有的地址解析引擎,解析得到像優酷,土豆,樂視這些網站上視頻的URL。
注2:本系統不但支持本地文件的分析,也支持網絡流的分析。
3.2 收藏夾
收藏夾功能目前還處於調整中。支持導入m3u格式的播放列表,以及XSPF格式的播放列表。雙擊收藏夾中的條目,可以將該條目對應的地址傳給主界面的“輸入路徑”。
3.3 播放控制
在“輸入路徑”裏添加視頻的URL之後,單擊系統左下角的“播放”大按鈕(一個圓圈裏面有一個三角形),就可以開始播放了。在“播放”按鈕的旁邊,排列着其它控制播放的按鈕。依次是:“後退”,“暫停”,“前進”,“停止”,“逐幀播放”,“全屏”。通過這些按鈕,基本上可以完成對播放的各種控制。此外,在這些按鈕的上方,還有一個播放的進度條。可以通過拖拽進度條的方式,調整視頻播放的進度。
在系統的右下角,有一個按鈕:“關於”。
3.4 播放設置
選擇菜單的“播放”->“播放器首選項”。打開播放設置對話框如圖所示。注:此處的設置只有在下一次視頻播放開始後纔會生效。
3.5 播放畫面
選擇菜單的“視頻”->“大小”。可以調整視頻播放窗口的大小。選擇菜單的“視頻”->“縱橫比”。可以調整視頻播放窗口的縱橫比。
選擇菜單的“視頻畫面”,可以調整視頻播放窗口顯示的內容,有以下3種:
* 視頻畫面
* 音頻波形圖
* 音頻離散傅里葉變換圖
3.6 數據輸出
選擇菜單的“數據”。可以輸出視頻播放過程中的中間數據。該選項卡可以用於輸出視音頻碼流數據,視頻解碼後的像素數據,或者音頻解碼後的採樣數據。數據輸出選項卡如下圖所示。注:特殊容器(mp4,mkv等)封裝的H.264直接輸出的話,會缺少SPS和PPS,因而導致碼流無法被識別。爲此專門添加了特殊容器輸出H.264的選項。
4 視頻分析
本章主要介紹和視頻分析相關的功能。4.1 視頻解碼分析
在視頻播放的過程中,單擊主界面視頻部分編碼參數部分的按鈕“視頻解碼分析”,打開視頻解碼分析對話框,如圖4-1所示。對話框中包含了一個幀列表。每個幀對應列表中的一條記錄。不同類型的幀有着不同的背景色。列表顯示了以下信息:
* 幀數
* 幀類型
* 關鍵幀
* 碼流順序
* PTS
4.2 視頻幀解碼分析
在視頻播放的過程中,單擊主界面視頻部分編碼參數部分的按鈕“單幀詳細分析”,打開視頻幀解碼分析對話框,如圖4-2所示。該部分主要用於對當前播放的視頻幀進行詳細的分析。可以列表顯示視頻一幀的詳細參數,包括:
* 幀數
* 幀類型
* PTS
* 顯示時間
* 參考幀數量
並可以對視頻進行宏塊級的分析,包含以下幾種參數的分析:
* 量化參數分析
* 宏塊類型分析
* 運動矢量list[0]分析
* 運動矢量list[1]分析
* 參考幀list[0]分析
* 參考幀list[1]分析
對話框上方的下拉框用於設置希望分析的內容。對話框左邊的“選項”部分可以設置分析結果的屬性。具體包含以下幾項:
通用選項 | |
顯示宏塊邊界 | 顯示視頻幀中宏塊的邊界。 |
字體 | 設置分析結果中文字的字體。 |
量化分析 | |
顯示QP值 | 顯示宏塊的QP值。 |
顯示背景顏色 | 根據QP值的不同,不同宏塊顯示不同灰度的背景顏色。 |
宏塊類型分析 | |
顯示子宏塊 | 顯示子宏塊的劃分方式。 |
顯示背景顏色 | 根據劃分方式的不同,不同宏塊顯示不同的背景顏色。 |
顯示跳過宏塊 | 在跳過宏塊的上方標記以“s”。 |
顯示參考列表 | 在使用參考幀的宏塊上標記List0和List1。 |
運動矢量[0]分析 | |
顏色 | 顯示的運動矢量[0]顏色。 |
樣式 | 運動矢量[0]外觀。 |
運動矢量[1]分析 | |
顏色 | 顯示的運動矢量[1]顏色。 |
樣式 | 運動矢量[1]外觀。 |
對話框中間的“宏塊類型”部分包含了各種類型的宏塊的數量的統計信息。例如幀內4x4,幀內16x16,16x16,16x8,8x16,8x8等類型的宏塊的個數。以及每行宏塊數,宏塊行數,總計宏塊數,每個宏塊包含的運動矢量個數等信息。
對話框右邊上方的“幀參數”部分包含了該視頻幀的一些其他信息。例如幀數,幀類型,大小,PTS,顯示時間,參考幀數量等信息。
對話框右邊下方的“量化”部分包含了QP的統計信息。包括QP的最大值,最小值以及平均值。
此外,如果勾選了“隨播放自動分析”選項,可以隨着系統對視頻的解碼播放,實時的分析視頻的碼流參數。
量化參數分析結果如圖所示。視頻幀被劃分成以宏塊爲單位的網格狀。圖中每個小方塊代表視頻碼流中的一個宏塊。其中的數字代表了該宏塊的量化參數。爲了使分析結果更加直觀,每個宏塊被標記以不同灰度的背景色,如圖4-3(a)所示。量化係數越大,相應的背景色的灰度越淺。此外,也可以以視頻幀的內容爲背景顯示分析結果,如圖4-3(b)所示。也可以去掉量化係數的顯示,如圖4-3(c)所示。
4.3 視頻非壓縮域分析
在視頻播放的過程中,單擊主界面視頻參數部分的按鈕“非壓縮域數據分析”,打開非壓縮域數據分析對話框,如圖4-7所示。由圖可見,可以從“分析方法”裏面選擇想要分析的內容,包含了顏色直方圖,Canny邊緣檢測,輪廓檢測,離散傅里葉變換,人臉識別。此外,還可以查看視頻的R,G,B分量以及Y,U,V分量。如果勾選了“隨着播放自動分析” 選項的話,可以隨着系統對視頻的解碼播放,實時的分析視頻的非壓縮域數據。5 音頻分析
本章主要介紹和音頻分析相關的功能。5.1 音頻解碼分析
在視頻播放的過程中,單擊主界面音頻編碼參數部分的按鈕“音頻解碼分析”,打開音頻解碼分析對話框,如圖5-1所示。對話框左邊是解碼狀態表,表中顯示了音頻碼流的情況。每個音頻幀對應一個柱狀圖。橫座標對應音頻幀序號,縱座標對應音頻幀大小。
對話框右邊對應的是幀列表。列表顯示了以下信息:
* 幀數
* 幀大小
* PTS
* DTS
6 其他功能
本章主要介紹系統的一些其它的功能。6.1 多國語言的支持
本軟件目前支持簡體中文和英文兩種界面。英文界面示例如圖6-1, 圖6-2, 圖6-3, 圖6-4所示。