李軍廷
摘 要: 最近幾年,數(shù)字視頻行業(yè)的發(fā)展飛速,數(shù)字視頻攝像機逐漸成為人們生活中一個重要的組成部分。與此同時,視頻的格式與編碼方式也隨之增加,F(xiàn)FMPEG的問世促進了音視頻之間的轉(zhuǎn)換。在此主要研究在Linux操作系統(tǒng)下如何進行FFMPEG的安裝、編譯,如何利用FFMPEG平臺進行視頻格式間的轉(zhuǎn)換,生產(chǎn)效率高、配置簡單、容錯性強是該視頻轉(zhuǎn)換與發(fā)布的主要特點,同時系統(tǒng)還可以對視頻進行壓縮,且壓縮效率很高,能夠明顯提高網(wǎng)絡(luò)傳輸效率。
關(guān)鍵詞: 視頻; 音頻/視頻轉(zhuǎn)換; 流媒體; FFMPEG
中圖分類號: TN919?34 文獻標識碼: A 文章編號: 1004?373X(2014)18?0023?03
Establishing of streaming media server by FFMPEG technology
LI Jun?ting
(Fire Brigade of Hebei Province, Shijiazhuang 050035, China)
Abstruct:In recent years, the rapid development of the digital video industry, digital video cameras become an important part in people's lives gradually. Meanwhile, the video format and encoding mode also increases. However, the advent of FFMPEG promotes the conversion between audio and video. How to install and compile FFMPEG under the Linux operating system, and how to use FFMPEG platform to convert between video formats are studies in this paper. High production efficiency, simple configuration and strong fault?tolerant are the main features of the video converter and release. The system can also compress video, has high compression efficiency, and can significantly improve the network transmission efficiency.
Keywords: video; transformation between audio and video; streaming media; FFMPEG
信息技術(shù)的發(fā)展很大程度地改變了人們的生活方式。當前,手機走進了人們的視野,成為人們?nèi)粘I畈豢苫蛉钡囊徊糠帧6椰F(xiàn)在的手機制造者越來越看重它的娛樂價值,手機功能的日漸強大讓人們意識到用它來觀看電視絕對不再是什么奢望。然而由于手機某些功能的限制,并非任何格式的視頻都可以播放出來,況且手機的內(nèi)存也是有限的,無法存儲大容量的電影,因此上就需要轉(zhuǎn)換和壓縮視頻的格式。為了能夠讓用戶更為方便地預(yù)覽視頻,就需要把其轉(zhuǎn)換成FLV格式[1]。
本文主要介紹視頻轉(zhuǎn)換系統(tǒng)在Linux操作系統(tǒng)下運用Java語言,通過FFMPEG平臺研發(fā)而成的。這樣用戶就可以在線播放視頻,也可以是下載到手機上來播放。
1 系統(tǒng)的目的
本系統(tǒng)提供了一個視頻轉(zhuǎn)換,上傳,發(fā)布一體化的平臺,在這個平臺上,管理員在上傳完源視頻后,源視頻就會被自動轉(zhuǎn)換系統(tǒng)進行相應(yīng)的分析與轉(zhuǎn)換,隨之會產(chǎn)生視頻縮略圖。之后轉(zhuǎn)換過后的視頻就會被視頻發(fā)布系統(tǒng)在網(wǎng)絡(luò)上進行發(fā)布。最后用戶就可以在手機或者是電腦上觀看瀏覽[2]。編碼,分辨率,幀數(shù)等屬性的制定其實是系統(tǒng)利用設(shè)備描述文件來制定的。多個目標文件可以同時輸出,自動地在許多不同的設(shè)備與其用途之間做調(diào)配,選擇最優(yōu)的文件質(zhì)量和文件尺寸。視頻還可以通過自動分割來滿足不同設(shè)備的不同需要,提升用戶的使用質(zhì)量,在視頻中添加水印之后還能夠保護所有人的權(quán)益。
2 系統(tǒng)設(shè)計
2.1 功能方面的設(shè)計
在視頻的上傳,轉(zhuǎn)換與發(fā)布上,本系統(tǒng)為用戶提供的服務(wù)相當完整。FIP方式和Web方式是視頻上傳的兩種方式。FIP方式的上傳速度很快,且適合上傳大容量的視頻;Web方式上傳相對簡單方便一些,適合上傳的是單個的視頻文件。所謂視頻文件的轉(zhuǎn)換,就是把源視頻轉(zhuǎn)換成需要的其他格式的視頻。Web和WAP兩種發(fā)布方式既可以供用戶通過手機瀏覽,也可以在網(wǎng)上瀏覽。
2.2 性能方面的設(shè)計
該系統(tǒng)支持并發(fā)計算,在單個服務(wù)器上用戶可以并發(fā)多個請求。而且包含隊列的管理與防阻塞的機制。利用多臺服務(wù)器進行分布計算和并發(fā)式計算可以進行量視頻的轉(zhuǎn)換,也可以通過管理接口,包括性能,日志,負載報告等[3]。
3 系統(tǒng)的實現(xiàn)
系統(tǒng)邏輯結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)整體結(jié)構(gòu)
3.1 系統(tǒng)研發(fā)平臺
系統(tǒng)的研發(fā)是在Linux系統(tǒng)下進行的,采用[JSP+Tomeat]的架構(gòu)來進行視頻的上傳和發(fā)布的。視頻的轉(zhuǎn)換采用Java作為開發(fā)語言,通過操作FFMPEG系統(tǒng)來實現(xiàn)。
3.2 視頻的上傳
視頻的上傳方式有兩種:FTP方式和Web方式:
FTP方式:適合于對大批量的視頻進行上傳。在視頻上傳的過程中,每一個視頻對應(yīng)的有兩個文件,一個就是視頻文件其本身,而另外一個就是與之對應(yīng)的相關(guān)屬性信息,有簡介,標題,標簽等。比如1.avi,1.txt就是一個視頻對應(yīng)的兩個文件。
Web方式:主要適合于上傳單個視頻。在上傳系統(tǒng)中通過采用[spsmartupload]件,可以方便的對文件進行上傳。
3.3 數(shù)據(jù)庫
系統(tǒng)的后臺數(shù)據(jù)庫為Oracle 10G,主要儲存視頻的相關(guān)信息。包括有視頻的標簽、簡介、標題、格式、大小、時長、尺寸等。
3.4 視頻轉(zhuǎn)換
系統(tǒng)的核心就是視頻轉(zhuǎn)換。其主要功能就是把上傳的視頻轉(zhuǎn)換成需要的各種格式,如3GP格式、FLV格式等。轉(zhuǎn)換時主要就是運用的就是FFMPEGJ進行的。以下是視頻轉(zhuǎn)換的流程圖如圖2所示。
FFMPEG簡介:FFMPEG作為一個視頻,音頻轉(zhuǎn)換器,可支持絕大多數(shù)符合工業(yè)標準的編碼,還能夠從一種格式轉(zhuǎn)換成另外的一種格式[4],并能利用攝像頭捕獲到音頻,視頻等。用FFMPEG進行視頻轉(zhuǎn)換的前提就是對FFMPEG的下載,安裝,編譯要正確,F(xiàn)FMPEG的最新版本可以通過SVN方式進行下載,SVN要在LINUX系統(tǒng)下安裝,成功安裝后執(zhí)行命令:
svn checkout svmsvamphyerhpqu ffmljghnmk ffmpcg
圖2 視頻轉(zhuǎn)換模塊流程
通過一定時間的下載,目錄下面就會產(chǎn)生一個名為ffmpeg的文件夾,這就是FFMPEG源文件。如果下載和安裝了以下文件,就會使ffmpeg能夠支持更多格式之間的轉(zhuǎn)換。以下文件也需要下載并安裝:[26204-510.zip],[26073-510.zip],[lame.tar.gz],[xvidcore-1.1.0.zip],[zlib-1.2.3.tar.gz],[libtheora.tar.gz],[libvorbis-1.1.1.tar.gz],[libogg-1.1.1.tar.gz],[faac-1.24.tar.gz],[faad2-2.0.tar.gz],[a52dec-0.7.4.tar],[all-20061022.tar]等文件,安裝好這些文件后就能夠進行FFPEG的編譯工作。3GP是絕大多數(shù)手機都支持的格式,而要想讓本系統(tǒng)支持3GP格式,編譯的時候也要加上[-enable-amr_nb-enable-amr_wb]參數(shù),最后,完整的編譯命令為:
[./configure-enable-shared-enable-mp3lame-enable-libogg-enable-vorbis]
[enable-faad-enable-faac-enable-xvid-enable-a52][enable-amr_nb-fixed-enable-arm_wb-enable-amr_if2-enable-gpl-cpu=i686 make]
[make] [install]
通過以下測試可以檢測到安裝的是否成功,先上傳一個視頻文件,如test.avi,執(zhí)行以下的命令:
[ffmpeg-itest.avi-acodecaac-ar8000-ac1-ab8-qscale5-s176*144-vcodech263-r10-g180test.3gp]
要是視頻能夠成功轉(zhuǎn)換,那就表明FFMPEG已經(jīng)安裝成功了。下一步就可以根據(jù)具體的需要進行視頻轉(zhuǎn)換了。FFMPEG的命令如下:
[ffmpeg[[options][-iinput_file]]???{[options]output_file}???]
對于那些輸入的原始文件,可能需要格式選項。[ffmpeg]在缺省的情況下會盡量地進行無損轉(zhuǎn)換,輸出與輸入相同的音頻,視頻參數(shù)。為了使經(jīng)過轉(zhuǎn)換的視頻質(zhì)量盡最大可能的好,默認配置通常不會被采用,而是要根據(jù)視頻的不同,采用最佳的配置參數(shù)。
視頻轉(zhuǎn)換中,運用Java的防阻塞機制與多線程機制。首先由調(diào)度程序[JobQueue]從源文件目錄[Source_File]下轉(zhuǎn)移一個尚未轉(zhuǎn)換的視頻和對應(yīng)屬性的文件到臨時文件夾[Temp_File]下,[JobQueue]把文件參數(shù)傳給轉(zhuǎn)換程序[Convert_Robot],由[Convert_Robot]來進行視頻的轉(zhuǎn)換。[Convert_Robot]首先利用FFMPEG命令讀取視頻的屬性信息,包括時長、格式、尺寸、幀速等參數(shù),然后根據(jù)這些參數(shù)來進行視頻轉(zhuǎn)換。根據(jù)系統(tǒng)的需要,每個視頻會出現(xiàn)4種版本的視頻普通版3GP,清晰版3GP,NV格式的,快速版3GP,如此一來就可以滿足不同的用戶的不同需要。3GP格式的主要針對手機用戶,可以供他們下載到手機上觀看。而NV格式主要是為了供用戶在網(wǎng)上直接觀看視頻。對于那些過長的視頻,系統(tǒng)會進行自動地截取,來滿足用戶下載時在時間上的需求。為了保護版權(quán)所有人的權(quán)益,在視頻的轉(zhuǎn)換過程中可以加入水印。同時還截取了每個視頻的第一秒作為此視頻的縮略圖。視頻轉(zhuǎn)換完成之后,轉(zhuǎn)換成功的視頻會被放入Publish_File文件夾中。在Image文件夾下放入縮略圖,同時也把屬性文件中的簡介、視頻標題、標簽等信息儲存到Oracle數(shù)據(jù)庫里。要是視頻轉(zhuǎn)換發(fā)生了錯誤,錯誤的信息就會被記錄到日志文件中。同時,轉(zhuǎn)換系統(tǒng)還可以根據(jù)服務(wù)器的負載情況靈活地調(diào)整線程,爭取轉(zhuǎn)換視頻的效率最高[5]。
3.5 視頻發(fā)布
用戶可以在視頻發(fā)布模塊看到最后的轉(zhuǎn)換產(chǎn)品。為了便于用戶觀看視頻,視頻發(fā)布模塊提供了兩種方式:通過互聯(lián)網(wǎng)在線觀看和下載到手機上觀看。使用電腦觀看的用戶可以直接點擊Flash格式進行在線觀看,因為Flash格式的視頻完全不需要下載就可以直接觀看。對于手機用戶,可以在三種3GP格式中選出一種進行下載。與此同時,這兩種方式都有個自動的搜索入口,用戶可以進入搜索入口來搜索自己想要的視頻。這個搜索入口可以索引數(shù)據(jù)庫中的視頻信息,它采用的是一種比較先進的索引技術(shù),即Lucene索引技術(shù),以便用戶能夠方便而又快捷地搜索到自己所需要的視頻[6]。
4 結(jié) 語
生產(chǎn)效率高、配置簡單、容錯性強是本視頻轉(zhuǎn)換與發(fā)布的主要特點。線程數(shù)的控制可以通過配置文件來進行。轉(zhuǎn)換速度得到很大地提高,與此同時還有超時機制。經(jīng)過測試,在一臺內(nèi)存為1 GB,Pentimu 4,CPU 293 GHz的 PC上,一小時大約能夠轉(zhuǎn)換300個視頻,這樣的轉(zhuǎn)換速度非常地接近實時轉(zhuǎn)換。該系統(tǒng)還可以對視頻進行壓縮,且壓縮效率很高,用H.263的編碼標準,一個大小為20 MB的視頻轉(zhuǎn)換成3GP格式之后,在手機觀看質(zhì)量不受影響的前提下,大約能夠壓縮到400 KB的大小,這樣很大程度地節(jié)約了網(wǎng)絡(luò)傳輸?shù)臅r間,明顯提高了網(wǎng)絡(luò)傳輸?shù)男?。該系統(tǒng)經(jīng)過稍微的改變之后,能夠執(zhí)行更為復雜的功能?,F(xiàn)今越來越多的手機都能夠支持視頻播放,且用戶也越來越習慣于在手機上觀看視頻,因此上視頻的需求量將會越來越大,使用此系統(tǒng)的市場前景相當廣闊。
參考文獻
[1] 胡成,任平安,李文莉.基于Android系統(tǒng)的FFmpeg多媒體同步傳輸算法研究[J].計算機技術(shù)與發(fā)展,2011(10):85?87.
[2] 劉建敏,楊斌,王俊麗.嵌入式Linux下基于FFmPeg的視頻硬件編解碼[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(6):28?31.
[3] 王瑩,李莉,王華.Symbian平臺下基于FFmpeg的H.264解碼器的移植[J].現(xiàn)代電子技術(shù),2011,34(11):43?46.
[4] 何圓圓,何凱.基于FFmpeg的H.264視頻解碼器的研究與實現(xiàn)[J].電腦知識與技術(shù),2012(35):67?69.
[5] 王洪波.搭建流媒體服務(wù)器[J].安徽電子信息職業(yè)技術(shù)學院學報,2005(6):95?96.
[6] 向偉昌.流媒體服務(wù)器性能測評系統(tǒng)的設(shè)計與實現(xiàn)[D].長沙:國防科學技術(shù)大學,2004.
FTP方式:適合于對大批量的視頻進行上傳。在視頻上傳的過程中,每一個視頻對應(yīng)的有兩個文件,一個就是視頻文件其本身,而另外一個就是與之對應(yīng)的相關(guān)屬性信息,有簡介,標題,標簽等。比如1.avi,1.txt就是一個視頻對應(yīng)的兩個文件。
Web方式:主要適合于上傳單個視頻。在上傳系統(tǒng)中通過采用[spsmartupload]件,可以方便的對文件進行上傳。
3.3 數(shù)據(jù)庫
系統(tǒng)的后臺數(shù)據(jù)庫為Oracle 10G,主要儲存視頻的相關(guān)信息。包括有視頻的標簽、簡介、標題、格式、大小、時長、尺寸等。
3.4 視頻轉(zhuǎn)換
系統(tǒng)的核心就是視頻轉(zhuǎn)換。其主要功能就是把上傳的視頻轉(zhuǎn)換成需要的各種格式,如3GP格式、FLV格式等。轉(zhuǎn)換時主要就是運用的就是FFMPEGJ進行的。以下是視頻轉(zhuǎn)換的流程圖如圖2所示。
FFMPEG簡介:FFMPEG作為一個視頻,音頻轉(zhuǎn)換器,可支持絕大多數(shù)符合工業(yè)標準的編碼,還能夠從一種格式轉(zhuǎn)換成另外的一種格式[4],并能利用攝像頭捕獲到音頻,視頻等。用FFMPEG進行視頻轉(zhuǎn)換的前提就是對FFMPEG的下載,安裝,編譯要正確,F(xiàn)FMPEG的最新版本可以通過SVN方式進行下載,SVN要在LINUX系統(tǒng)下安裝,成功安裝后執(zhí)行命令:
svn checkout svmsvamphyerhpqu ffmljghnmk ffmpcg
圖2 視頻轉(zhuǎn)換模塊流程
通過一定時間的下載,目錄下面就會產(chǎn)生一個名為ffmpeg的文件夾,這就是FFMPEG源文件。如果下載和安裝了以下文件,就會使ffmpeg能夠支持更多格式之間的轉(zhuǎn)換。以下文件也需要下載并安裝:[26204-510.zip],[26073-510.zip],[lame.tar.gz],[xvidcore-1.1.0.zip],[zlib-1.2.3.tar.gz],[libtheora.tar.gz],[libvorbis-1.1.1.tar.gz],[libogg-1.1.1.tar.gz],[faac-1.24.tar.gz],[faad2-2.0.tar.gz],[a52dec-0.7.4.tar],[all-20061022.tar]等文件,安裝好這些文件后就能夠進行FFPEG的編譯工作。3GP是絕大多數(shù)手機都支持的格式,而要想讓本系統(tǒng)支持3GP格式,編譯的時候也要加上[-enable-amr_nb-enable-amr_wb]參數(shù),最后,完整的編譯命令為:
[./configure-enable-shared-enable-mp3lame-enable-libogg-enable-vorbis]
[enable-faad-enable-faac-enable-xvid-enable-a52][enable-amr_nb-fixed-enable-arm_wb-enable-amr_if2-enable-gpl-cpu=i686 make]
[make] [install]
通過以下測試可以檢測到安裝的是否成功,先上傳一個視頻文件,如test.avi,執(zhí)行以下的命令:
[ffmpeg-itest.avi-acodecaac-ar8000-ac1-ab8-qscale5-s176*144-vcodech263-r10-g180test.3gp]
要是視頻能夠成功轉(zhuǎn)換,那就表明FFMPEG已經(jīng)安裝成功了。下一步就可以根據(jù)具體的需要進行視頻轉(zhuǎn)換了。FFMPEG的命令如下:
[ffmpeg[[options][-iinput_file]]???{[options]output_file}???]
對于那些輸入的原始文件,可能需要格式選項。[ffmpeg]在缺省的情況下會盡量地進行無損轉(zhuǎn)換,輸出與輸入相同的音頻,視頻參數(shù)。為了使經(jīng)過轉(zhuǎn)換的視頻質(zhì)量盡最大可能的好,默認配置通常不會被采用,而是要根據(jù)視頻的不同,采用最佳的配置參數(shù)。
視頻轉(zhuǎn)換中,運用Java的防阻塞機制與多線程機制。首先由調(diào)度程序[JobQueue]從源文件目錄[Source_File]下轉(zhuǎn)移一個尚未轉(zhuǎn)換的視頻和對應(yīng)屬性的文件到臨時文件夾[Temp_File]下,[JobQueue]把文件參數(shù)傳給轉(zhuǎn)換程序[Convert_Robot],由[Convert_Robot]來進行視頻的轉(zhuǎn)換。[Convert_Robot]首先利用FFMPEG命令讀取視頻的屬性信息,包括時長、格式、尺寸、幀速等參數(shù),然后根據(jù)這些參數(shù)來進行視頻轉(zhuǎn)換。根據(jù)系統(tǒng)的需要,每個視頻會出現(xiàn)4種版本的視頻普通版3GP,清晰版3GP,NV格式的,快速版3GP,如此一來就可以滿足不同的用戶的不同需要。3GP格式的主要針對手機用戶,可以供他們下載到手機上觀看。而NV格式主要是為了供用戶在網(wǎng)上直接觀看視頻。對于那些過長的視頻,系統(tǒng)會進行自動地截取,來滿足用戶下載時在時間上的需求。為了保護版權(quán)所有人的權(quán)益,在視頻的轉(zhuǎn)換過程中可以加入水印。同時還截取了每個視頻的第一秒作為此視頻的縮略圖。視頻轉(zhuǎn)換完成之后,轉(zhuǎn)換成功的視頻會被放入Publish_File文件夾中。在Image文件夾下放入縮略圖,同時也把屬性文件中的簡介、視頻標題、標簽等信息儲存到Oracle數(shù)據(jù)庫里。要是視頻轉(zhuǎn)換發(fā)生了錯誤,錯誤的信息就會被記錄到日志文件中。同時,轉(zhuǎn)換系統(tǒng)還可以根據(jù)服務(wù)器的負載情況靈活地調(diào)整線程,爭取轉(zhuǎn)換視頻的效率最高[5]。
3.5 視頻發(fā)布
用戶可以在視頻發(fā)布模塊看到最后的轉(zhuǎn)換產(chǎn)品。為了便于用戶觀看視頻,視頻發(fā)布模塊提供了兩種方式:通過互聯(lián)網(wǎng)在線觀看和下載到手機上觀看。使用電腦觀看的用戶可以直接點擊Flash格式進行在線觀看,因為Flash格式的視頻完全不需要下載就可以直接觀看。對于手機用戶,可以在三種3GP格式中選出一種進行下載。與此同時,這兩種方式都有個自動的搜索入口,用戶可以進入搜索入口來搜索自己想要的視頻。這個搜索入口可以索引數(shù)據(jù)庫中的視頻信息,它采用的是一種比較先進的索引技術(shù),即Lucene索引技術(shù),以便用戶能夠方便而又快捷地搜索到自己所需要的視頻[6]。
4 結(jié) 語
生產(chǎn)效率高、配置簡單、容錯性強是本視頻轉(zhuǎn)換與發(fā)布的主要特點。線程數(shù)的控制可以通過配置文件來進行。轉(zhuǎn)換速度得到很大地提高,與此同時還有超時機制。經(jīng)過測試,在一臺內(nèi)存為1 GB,Pentimu 4,CPU 293 GHz的 PC上,一小時大約能夠轉(zhuǎn)換300個視頻,這樣的轉(zhuǎn)換速度非常地接近實時轉(zhuǎn)換。該系統(tǒng)還可以對視頻進行壓縮,且壓縮效率很高,用H.263的編碼標準,一個大小為20 MB的視頻轉(zhuǎn)換成3GP格式之后,在手機觀看質(zhì)量不受影響的前提下,大約能夠壓縮到400 KB的大小,這樣很大程度地節(jié)約了網(wǎng)絡(luò)傳輸?shù)臅r間,明顯提高了網(wǎng)絡(luò)傳輸?shù)男?。該系統(tǒng)經(jīng)過稍微的改變之后,能夠執(zhí)行更為復雜的功能?,F(xiàn)今越來越多的手機都能夠支持視頻播放,且用戶也越來越習慣于在手機上觀看視頻,因此上視頻的需求量將會越來越大,使用此系統(tǒng)的市場前景相當廣闊。
參考文獻
[1] 胡成,任平安,李文莉.基于Android系統(tǒng)的FFmpeg多媒體同步傳輸算法研究[J].計算機技術(shù)與發(fā)展,2011(10):85?87.
[2] 劉建敏,楊斌,王俊麗.嵌入式Linux下基于FFmPeg的視頻硬件編解碼[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(6):28?31.
[3] 王瑩,李莉,王華.Symbian平臺下基于FFmpeg的H.264解碼器的移植[J].現(xiàn)代電子技術(shù),2011,34(11):43?46.
[4] 何圓圓,何凱.基于FFmpeg的H.264視頻解碼器的研究與實現(xiàn)[J].電腦知識與技術(shù),2012(35):67?69.
[5] 王洪波.搭建流媒體服務(wù)器[J].安徽電子信息職業(yè)技術(shù)學院學報,2005(6):95?96.
[6] 向偉昌.流媒體服務(wù)器性能測評系統(tǒng)的設(shè)計與實現(xiàn)[D].長沙:國防科學技術(shù)大學,2004.
FTP方式:適合于對大批量的視頻進行上傳。在視頻上傳的過程中,每一個視頻對應(yīng)的有兩個文件,一個就是視頻文件其本身,而另外一個就是與之對應(yīng)的相關(guān)屬性信息,有簡介,標題,標簽等。比如1.avi,1.txt就是一個視頻對應(yīng)的兩個文件。
Web方式:主要適合于上傳單個視頻。在上傳系統(tǒng)中通過采用[spsmartupload]件,可以方便的對文件進行上傳。
3.3 數(shù)據(jù)庫
系統(tǒng)的后臺數(shù)據(jù)庫為Oracle 10G,主要儲存視頻的相關(guān)信息。包括有視頻的標簽、簡介、標題、格式、大小、時長、尺寸等。
3.4 視頻轉(zhuǎn)換
系統(tǒng)的核心就是視頻轉(zhuǎn)換。其主要功能就是把上傳的視頻轉(zhuǎn)換成需要的各種格式,如3GP格式、FLV格式等。轉(zhuǎn)換時主要就是運用的就是FFMPEGJ進行的。以下是視頻轉(zhuǎn)換的流程圖如圖2所示。
FFMPEG簡介:FFMPEG作為一個視頻,音頻轉(zhuǎn)換器,可支持絕大多數(shù)符合工業(yè)標準的編碼,還能夠從一種格式轉(zhuǎn)換成另外的一種格式[4],并能利用攝像頭捕獲到音頻,視頻等。用FFMPEG進行視頻轉(zhuǎn)換的前提就是對FFMPEG的下載,安裝,編譯要正確,F(xiàn)FMPEG的最新版本可以通過SVN方式進行下載,SVN要在LINUX系統(tǒng)下安裝,成功安裝后執(zhí)行命令:
svn checkout svmsvamphyerhpqu ffmljghnmk ffmpcg
圖2 視頻轉(zhuǎn)換模塊流程
通過一定時間的下載,目錄下面就會產(chǎn)生一個名為ffmpeg的文件夾,這就是FFMPEG源文件。如果下載和安裝了以下文件,就會使ffmpeg能夠支持更多格式之間的轉(zhuǎn)換。以下文件也需要下載并安裝:[26204-510.zip],[26073-510.zip],[lame.tar.gz],[xvidcore-1.1.0.zip],[zlib-1.2.3.tar.gz],[libtheora.tar.gz],[libvorbis-1.1.1.tar.gz],[libogg-1.1.1.tar.gz],[faac-1.24.tar.gz],[faad2-2.0.tar.gz],[a52dec-0.7.4.tar],[all-20061022.tar]等文件,安裝好這些文件后就能夠進行FFPEG的編譯工作。3GP是絕大多數(shù)手機都支持的格式,而要想讓本系統(tǒng)支持3GP格式,編譯的時候也要加上[-enable-amr_nb-enable-amr_wb]參數(shù),最后,完整的編譯命令為:
[./configure-enable-shared-enable-mp3lame-enable-libogg-enable-vorbis]
[enable-faad-enable-faac-enable-xvid-enable-a52][enable-amr_nb-fixed-enable-arm_wb-enable-amr_if2-enable-gpl-cpu=i686 make]
[make] [install]
通過以下測試可以檢測到安裝的是否成功,先上傳一個視頻文件,如test.avi,執(zhí)行以下的命令:
[ffmpeg-itest.avi-acodecaac-ar8000-ac1-ab8-qscale5-s176*144-vcodech263-r10-g180test.3gp]
要是視頻能夠成功轉(zhuǎn)換,那就表明FFMPEG已經(jīng)安裝成功了。下一步就可以根據(jù)具體的需要進行視頻轉(zhuǎn)換了。FFMPEG的命令如下:
[ffmpeg[[options][-iinput_file]]???{[options]output_file}???]
對于那些輸入的原始文件,可能需要格式選項。[ffmpeg]在缺省的情況下會盡量地進行無損轉(zhuǎn)換,輸出與輸入相同的音頻,視頻參數(shù)。為了使經(jīng)過轉(zhuǎn)換的視頻質(zhì)量盡最大可能的好,默認配置通常不會被采用,而是要根據(jù)視頻的不同,采用最佳的配置參數(shù)。
視頻轉(zhuǎn)換中,運用Java的防阻塞機制與多線程機制。首先由調(diào)度程序[JobQueue]從源文件目錄[Source_File]下轉(zhuǎn)移一個尚未轉(zhuǎn)換的視頻和對應(yīng)屬性的文件到臨時文件夾[Temp_File]下,[JobQueue]把文件參數(shù)傳給轉(zhuǎn)換程序[Convert_Robot],由[Convert_Robot]來進行視頻的轉(zhuǎn)換。[Convert_Robot]首先利用FFMPEG命令讀取視頻的屬性信息,包括時長、格式、尺寸、幀速等參數(shù),然后根據(jù)這些參數(shù)來進行視頻轉(zhuǎn)換。根據(jù)系統(tǒng)的需要,每個視頻會出現(xiàn)4種版本的視頻普通版3GP,清晰版3GP,NV格式的,快速版3GP,如此一來就可以滿足不同的用戶的不同需要。3GP格式的主要針對手機用戶,可以供他們下載到手機上觀看。而NV格式主要是為了供用戶在網(wǎng)上直接觀看視頻。對于那些過長的視頻,系統(tǒng)會進行自動地截取,來滿足用戶下載時在時間上的需求。為了保護版權(quán)所有人的權(quán)益,在視頻的轉(zhuǎn)換過程中可以加入水印。同時還截取了每個視頻的第一秒作為此視頻的縮略圖。視頻轉(zhuǎn)換完成之后,轉(zhuǎn)換成功的視頻會被放入Publish_File文件夾中。在Image文件夾下放入縮略圖,同時也把屬性文件中的簡介、視頻標題、標簽等信息儲存到Oracle數(shù)據(jù)庫里。要是視頻轉(zhuǎn)換發(fā)生了錯誤,錯誤的信息就會被記錄到日志文件中。同時,轉(zhuǎn)換系統(tǒng)還可以根據(jù)服務(wù)器的負載情況靈活地調(diào)整線程,爭取轉(zhuǎn)換視頻的效率最高[5]。
3.5 視頻發(fā)布
用戶可以在視頻發(fā)布模塊看到最后的轉(zhuǎn)換產(chǎn)品。為了便于用戶觀看視頻,視頻發(fā)布模塊提供了兩種方式:通過互聯(lián)網(wǎng)在線觀看和下載到手機上觀看。使用電腦觀看的用戶可以直接點擊Flash格式進行在線觀看,因為Flash格式的視頻完全不需要下載就可以直接觀看。對于手機用戶,可以在三種3GP格式中選出一種進行下載。與此同時,這兩種方式都有個自動的搜索入口,用戶可以進入搜索入口來搜索自己想要的視頻。這個搜索入口可以索引數(shù)據(jù)庫中的視頻信息,它采用的是一種比較先進的索引技術(shù),即Lucene索引技術(shù),以便用戶能夠方便而又快捷地搜索到自己所需要的視頻[6]。
4 結(jié) 語
生產(chǎn)效率高、配置簡單、容錯性強是本視頻轉(zhuǎn)換與發(fā)布的主要特點。線程數(shù)的控制可以通過配置文件來進行。轉(zhuǎn)換速度得到很大地提高,與此同時還有超時機制。經(jīng)過測試,在一臺內(nèi)存為1 GB,Pentimu 4,CPU 293 GHz的 PC上,一小時大約能夠轉(zhuǎn)換300個視頻,這樣的轉(zhuǎn)換速度非常地接近實時轉(zhuǎn)換。該系統(tǒng)還可以對視頻進行壓縮,且壓縮效率很高,用H.263的編碼標準,一個大小為20 MB的視頻轉(zhuǎn)換成3GP格式之后,在手機觀看質(zhì)量不受影響的前提下,大約能夠壓縮到400 KB的大小,這樣很大程度地節(jié)約了網(wǎng)絡(luò)傳輸?shù)臅r間,明顯提高了網(wǎng)絡(luò)傳輸?shù)男?。該系統(tǒng)經(jīng)過稍微的改變之后,能夠執(zhí)行更為復雜的功能?,F(xiàn)今越來越多的手機都能夠支持視頻播放,且用戶也越來越習慣于在手機上觀看視頻,因此上視頻的需求量將會越來越大,使用此系統(tǒng)的市場前景相當廣闊。
參考文獻
[1] 胡成,任平安,李文莉.基于Android系統(tǒng)的FFmpeg多媒體同步傳輸算法研究[J].計算機技術(shù)與發(fā)展,2011(10):85?87.
[2] 劉建敏,楊斌,王俊麗.嵌入式Linux下基于FFmPeg的視頻硬件編解碼[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(6):28?31.
[3] 王瑩,李莉,王華.Symbian平臺下基于FFmpeg的H.264解碼器的移植[J].現(xiàn)代電子技術(shù),2011,34(11):43?46.
[4] 何圓圓,何凱.基于FFmpeg的H.264視頻解碼器的研究與實現(xiàn)[J].電腦知識與技術(shù),2012(35):67?69.
[5] 王洪波.搭建流媒體服務(wù)器[J].安徽電子信息職業(yè)技術(shù)學院學報,2005(6):95?96.
[6] 向偉昌.流媒體服務(wù)器性能測評系統(tǒng)的設(shè)計與實現(xiàn)[D].長沙:國防科學技術(shù)大學,2004.