張立平
(武漢鐵路職業(yè)技術(shù)學(xué)院電子電氣工程系,湖北武漢 430205)
隨著流媒體播放、視頻監(jiān)控等應(yīng)用程序的開發(fā)被普遍應(yīng)用,H.264被認為是最有影響力的流媒體視頻壓縮標準。它既保留了以往壓縮技術(shù)的優(yōu)點和精華,又在編碼質(zhì)量和壓縮比上比原有的視頻編碼標準都有了明顯的提高。在相同的視覺感知質(zhì)量上,H.264 的數(shù)據(jù)壓縮比比當(dāng)前DVD系統(tǒng)中使用的MPEG-2高2~3倍,比MPEG-4高1.5~2倍。由于H.264/AVC 采取了大量的先進算法,在編碼效果和實現(xiàn)復(fù)雜度之間取得了良好的平衡[1-4]。正因為如此,目前網(wǎng)上大部分視頻是基于H.264視頻標準的。
傳統(tǒng)的影音播放器沒有播放H.264文件的功能,即使通過升級實現(xiàn)該功能,但使用時需安裝,用戶不方便。針對此問題,作者利用FFOCX控件在Delphi中實現(xiàn)了H.264視頻的解碼。
FFmpeg是一套用于錄制、轉(zhuǎn)換和流化音頻、視頻的完整解決方案,而FFOCX 是對FFmpeg庫的完美封裝和擴展后的ActiveX OCX 版,支持目前所有的音視頻格式。FFOCX 能夠充分發(fā)揮FFmpeg庫的強大功能,并且比FFmpeg官方所提供的命令行程序更靈活、強大,比如支持轉(zhuǎn)換預(yù)覽,支持視頻合并,支持幀輸入、幀輸出,還支持同時轉(zhuǎn)換多個文件,可以充分利用現(xiàn)在越來越普及的多核CPU 資源[5]。FFOCX 控件名為ActiveFFmpegControls.ocx,可以從www.ccavc.com 網(wǎng)站下載。
普通的H264播放器一般具有播放、暫停、停止、音量調(diào)節(jié)等功能。一個簡單的H264播放器包含以下3個部分:
(1)播放窗口:用于播放H264視頻文件。
(2)播放控制:包括播放、暫停、停止以及音量控制等。
(3)顯示播放信息:如視頻格式、幀格式、播放時間、目前播放時間等。
在用戶界面中,包含視頻播放窗口、水平滑塊(調(diào)節(jié)視頻播放位置)、列表(設(shè)置視頻播放比率以及控制視頻播放的按鈕。在播放視頻時,顯示播放時間等信息。
FFOCX 控件在Delphi中不能直接使用,必須先注冊(使用Regsvr32命令)并安裝后才能使用。Delphi2010中安裝ActiveX 控件的方法如下[6]:
(1)注冊FFOCX 控件。
執(zhí)行regsvr32 ActiveFFmpegControls.ocx命令,可完成注冊。
(2)啟動Delphi2010。
(3)選擇File→New→Package-Delphi for Win32菜單命令,新建一個包。
(4)選擇Component菜單下的Import Component命令,打開Import Component對話框。
(5)選擇Import ActiveX Control單選項,單擊“Next”按鈕,彈出“Registered ActiveX Controls”。
(6)在對話框中選擇“ActiveX FFmpeg Control 3.0”。
(7)單擊“Next”按鈕,彈出控件的Unit等存放位置對話框,選中“Generate component wrappers”復(fù)選框。
(8)單擊“Next”按鈕,彈出“Create Unit”對話框。
(9)選擇“Add Unit to package”單選項,單擊“Finish”按鈕,完成安裝。
(10)在項目管理器中用鼠標右擊Package,從彈出的快捷菜單中選擇“Install”命令,完成Package的安裝。
(11)Delphi2010 中添加FFOCX 控件成功后就可以在Delphi2010窗口中添加該控件了,該控件位于組件面板的ActiveX 控件類中,包括FFEncoder、FFPlayer、FFDecoder、FFLogger、FFLoader。* FFEncoder用于音頻和視頻格式的轉(zhuǎn)換。
*FFPlayer用于播放音頻和視頻文件。
*FFDecoder用于獲得媒體文件信息以及解碼視頻幀畫面或音頻采樣數(shù)據(jù).
*FFLogger捕獲其他組件輸出的日志。
*FFLoader用于運行時期加載動態(tài)庫。
文中是使用FFPlayer控件開發(fā)的簡單音視頻播放器。
(1)新建一個基于對話框的VCL Form Application 名為Player_H264 的應(yīng)用程序,窗體Caption屬性設(shè)為“簡單音視頻播放器”,其項目名稱為playerh264。調(diào)整窗體至合適大小。
(2)添加控件。
①將組件面板ActiveX控件類中的FFPlayer控件添加到窗體中,該控件用于播放視頻文件。
②在窗體上添加1個打開文件對話框控件(Opendialog)。
③在窗體上添加1個面板控件(Panel)、1個ScrollBar控件、1個TrackBar控件、1個ListBox控件、4個按鈕控件、5個Label控件和1個Com-BoBox控件,控件名取默認值。Panel控件窗口用于播放視頻,ScrollBar控件用于控制視頻播放進度,TrackBar控件用于控制播放聲音。
(3)調(diào)整各控件至合適大小,效果如圖1所示。
圖1 添加控件效果
(1)主窗口代碼
(2)音視頻文件播放窗口代碼
運行程序,結(jié)果如圖2所示。
圖2 運行結(jié)果
FFOCX 控件具有豐富的功能,能實現(xiàn)目前所有音視頻格式文件的播放。www.ccvac.com網(wǎng)站提供了兩種格式的組件,一種是OCX 控件,其最高版本為3.0,適用于目前所有開發(fā)環(huán)境;另一種是針對Delphi 開發(fā)平臺的,控件名為FFVCL,并提供了豐富的事例程序。本文開發(fā)的簡單音視頻播放器使用的是OCX 控件,讀者可以使用此控件設(shè)計出屬于自己的功能強大的媒體播放器。
1 劉輝,魏玉琛,蒲布.基于Directshow 的H.264解碼器的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2011,37(9):139-141,148.
2 程少煉,陳林.基于Directshow 的H.264流媒體播放器設(shè)計[J].山西電子技術(shù),2010,6:65-67.
3 吳杰,吳寧,周陽等.基于H.264的網(wǎng)絡(luò)流媒體播放控件的設(shè)計與實現(xiàn)[J].南京師范大學(xué)學(xué)報(工程技術(shù)版),2011,11(4):53-56.
4 張前進.基于RTP 的H264實時傳輸系統(tǒng)的設(shè)計與實現(xiàn)[J].企業(yè)技術(shù)開發(fā),2011,30(23):1-2.
5 www.ccvac.com.
6 向隅.基于Delphi的PDF文檔顯示的實現(xiàn)[J].長江大學(xué)學(xué)報(自然科學(xué)版),2009,6(2):252-254.