高睿鵬
(內(nèi)蒙古工業(yè)大學 內(nèi)蒙古 呼和浩特 010051)
我校圖書館近年來采購和收集了大量的教學、培訓、學習等視頻資料,為方便讀者使用并保護這些資源的版權(quán),準備通過視頻點播網(wǎng)站向讀者提供這些視頻資源,供讀者在線觀看。圖書館引進的視頻資料中包含了多種不同格式的視頻文件,要為這些視頻文件搭建視頻點播服務,首先要解決播放插件不兼容的問題。目前解決這個問題主要有兩種方式:第一種,對于不同格式的視頻文件,采用不同的插件播放;第二種,利用格式轉(zhuǎn)換軟件,將所有格式轉(zhuǎn)換為同一種格式。若采用不同播放插件,就需要為不同插件開發(fā)多個界面,而且日后的維護較為不便;若采用轉(zhuǎn)換格式的方式,由于視頻文件數(shù)據(jù)量一般較大,轉(zhuǎn)換格式是一項耗費時間和資源的工作,而且轉(zhuǎn)換格式后的視頻質(zhì)量可能不高,增加了系統(tǒng)的維護成本。
本文研究的多格式視頻插件,可同時支持Rm/Rmvb、AVI、wmv/asf、MPEG、mkv 和 flv 等這些主流視頻文件格式的視頻插件,解決上述不足之處。
本文是在Windows操作系統(tǒng)下使用VC中的ATL(ActiveX Template Library,ActiveX模版庫)做為開發(fā)工具,基于ActiveX插件技術(shù)開發(fā)視頻插件。ActiveX技術(shù)是基于COM技術(shù)的一種插件開發(fā)技術(shù),使用ActiveX開發(fā)的插件可以方便的嵌入網(wǎng)頁或其他應用程序,擴展這些應用的功能。其中使用FFMPEG解碼視頻文件,使用SDL播放視頻文件。
本文設(shè)計的ActiveX視頻插件主要有以下幾個方面:
(1)該插件能夠嵌入網(wǎng)頁瀏覽器或其他容器中使用,通過控件接口與網(wǎng)頁瀏覽器通信,由網(wǎng)頁瀏覽器提供視頻文件的地址等屬性。
(2)設(shè)計控件接口的方法,使用FFMPEG編解碼庫實現(xiàn)解碼視頻文件,使用SDL多媒體庫實現(xiàn)播放視頻,以及播放控制功能。
(3)由于解碼和播放是同時進行,所以建立多個線程,每個線程分別完成解碼和播放功能。
視頻文件有多種格式,每種文件格式使用不同的方式封裝了音頻流和視頻流,而音頻流和視頻流又由不同編碼器編碼生成。解碼視頻是將視頻文件的音頻流和視頻流解碼成音頻幀和視頻幀,分為解碼音頻模塊和解碼視頻模塊。
本文使用FFMPEG多媒體庫分析視頻文件,并解碼其中的音頻流和視頻流。FFMPEG多媒體庫支持包括MPEG系列在內(nèi)的眾多視頻壓縮標準和數(shù)十種常見的音視頻文件格式,是一套比較完備的格式轉(zhuǎn)換、壓縮編碼、視頻音頻文件播放的解決方案。
解碼視頻包括解碼音頻模塊和解碼視頻模塊,因為音頻和視頻的解碼需要同時進行,所以把解碼音頻和解碼視頻分配到兩個線程中并行執(zhí)行。
控件主進程負責對FFMPEG庫和SDL進行初始化,創(chuàng)建解碼線程,從視頻幀隊列取出并顯示視頻幀以及等待并響應線程發(fā)出的事件。
解碼線程完成將視頻流和音頻流分離,將視頻包和音頻包分別放入視頻包隊列和音頻包隊列,并創(chuàng)建視頻線程和音頻線程。
音頻線程完成解碼音頻包得到音頻幀并播放聲音。
視頻線程完成解碼視頻包得到視頻幀,并將視頻幀加入到視頻幀隊列。
播放視頻是將解碼的音頻幀和視頻幀通過音頻和視頻設(shè)備播放出。播放聲音和顯示視頻都使用SDL多媒體庫實現(xiàn),SDL多媒體庫是一個跨平臺的多媒體底層存取庫,可以直接控制底層的多媒體硬件的接口,用于編寫音頻視頻應用和游戲等。
在播放過程中主要解決音頻與視頻的同步問題,以及播放控制。音頻與視頻同步是通過比較視頻幀的顯示時間戳與音頻播放時間,調(diào)整視頻幀的顯示時間,實現(xiàn)視頻與音頻同步。播放控制主要有快進快退和暫停功能??爝M快退通過清空當前幀緩存,根據(jù)新的位置重新向幀緩存中添加幀實現(xiàn);暫停功能則是將解碼線程和播放線程都掛起,暫停工作,等待恢復播放信號出現(xiàn)后再繼續(xù)播放。
在系統(tǒng)中注冊插件后,可通過如下代碼在網(wǎng)頁種調(diào)用本插件:
其中 “4296D608-0847-4AD9-9BF7-934B4E4298DB”是該插件在系統(tǒng)中的標識符,通過此標識符可找到需要調(diào)用插件的dll文件。
Codebase表示若客戶機沒有安裝此插件,可以從codebase指定的地址下載插件的安裝包,客戶機在下載安裝包后自動安裝并注冊插件。若客戶機以安裝插件則直接調(diào)用插件。
插件的調(diào)用方法與調(diào)用WMP控件和RealPlayer控件基本相同,只需要改變claasid參數(shù)即可。所以,此插件可以方便的應用于使用播放控件的視頻點播系統(tǒng),而且能兼容各種格式的視頻文件,極大的節(jié)省了視頻點播系統(tǒng)的管理成本。
本文研究的多格式通用視頻插件是在Windows系統(tǒng)中,Visual Studio集成環(huán)境下,使用ActiveX技術(shù)開發(fā),利用FFMPEG編解碼庫對多種視頻文件格式以及視頻編碼的支持, 實現(xiàn)可同時支持 Rm/Rmvb、AVI、wmv/asf、MPEG、mkv 和flv等多種主流視頻文件格式的通用視頻插件,整個插件采用多線程的方式,各個線程分別完成不同功能模塊。
在圖書館視頻點播系統(tǒng)中應用該插件,可方便的發(fā)布各種格式的視頻文件,無需轉(zhuǎn)換格式,提高了圖書館視頻點播系統(tǒng)維護工作的效率,也方便了讀者及時觀看最新的視頻文獻。
[1]求是科技.Visual C++音視頻編解碼技術(shù)及實踐[M].北京:人民郵電出版社,2006.
[2]蔣志峰.ffmpeg的快速音視頻開發(fā)方法[J].單片機與嵌入式系統(tǒng)應用,2008,1:69-71.
[3]劉馬飛,曾學文,倪宏.Windows平臺下應用FFMPEG實現(xiàn)H.264視頻回放[J].微計算機應用,2008,29(11):61-65.
[4]FFMPEG 官方網(wǎng)站.http://ffmpeg.org/index.html[OL].
[5]SDL 官方網(wǎng)站.http://www.libsdl.org[OL].
[6]視頻技術(shù)論壇.http://bbs.chinavideo.org/[OL].