Linux電影播放器設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

緒論研究背景現(xiàn)如今隨著計(jì)算機(jī)在各個(gè)領(lǐng)域的廣泛應(yīng)用,視頻播放器在如今社會(huì)已融入到人們生活的各個(gè)方面,不僅僅是娛樂(lè),在工作和學(xué)習(xí)中也擁有不可忽視的地位,多數(shù)都支持常見(jiàn)的媒體格式、.mp4、.avi、rm、.rmvb等。隨著C語(yǔ)言的發(fā)展和嵌入式系統(tǒng)技術(shù)的推廣,音頻解碼技術(shù)、存儲(chǔ)器技術(shù)愈發(fā)成熟。在嵌入式系統(tǒng)低端應(yīng)用中,存在著大量的小型嵌入式應(yīng)用系統(tǒng),基于Linux下的視頻播放器就是其中一員,由于能滿(mǎn)足人們視聽(tīng)享受已成為熱門(mén),隨著Qt的發(fā)展,基于Qt開(kāi)發(fā)的程序成本大大降低,Qt也越來(lái)越穩(wěn)定。同時(shí)Qt強(qiáng)大的開(kāi)發(fā)功能和可移植性實(shí)現(xiàn)了多平臺(tái)的兼容性,可以很快移植到其他平臺(tái),從而節(jié)約了開(kāi)發(fā)周期和成本,促進(jìn)嵌入式設(shè)備的開(kāi)發(fā)水平。因此基于Qt的嵌入式系統(tǒng)中實(shí)現(xiàn)視頻播放器具有深刻的意義和價(jià)值。本文將設(shè)計(jì)并實(shí)現(xiàn)一款界面清楚明了,操作簡(jiǎn)單,支持多種格式媒體。該播放器的主要功能是播放一些常見(jiàn)的視頻的格式文件,在功能上達(dá)到簡(jiǎn)單易行,消耗資源少。主要實(shí)現(xiàn)的功能:文件控制(主要用于添加播放文件);播放控制(控制視頻的播放狀態(tài))。聲音控制(調(diào)整音量的大小);顯示控制(若播放的是視頻文件應(yīng)當(dāng)顯示圖像,可以進(jìn)行按比例播放或者全屏)。在文獻(xiàn)中都詳細(xì)介紹了嵌入式多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)的各種解決方法。如由Christopher

Hallinan.編寫(xiě)的《嵌入式Linux基礎(chǔ)教程(第2版)(英文版)》中介紹了引導(dǎo)加載程序、系統(tǒng)初始化、文件系統(tǒng)、閃存和內(nèi)核、應(yīng)用程序調(diào)試技巧等,還講述了構(gòu)建Linux系統(tǒng)的工作原理,用于驅(qū)動(dòng)不同架構(gòu)的配置,Linux內(nèi)核源碼樹(shù)的特性,如何根據(jù)需求配制內(nèi)核運(yùn)行時(shí)的行為,如何擴(kuò)展系統(tǒng)功能,用于構(gòu)建完整嵌入式Linux發(fā)行版的常用構(gòu)建系統(tǒng),USB子系統(tǒng)和系統(tǒng)配置工具udev等內(nèi)容,同時(shí)還講述了構(gòu)建系統(tǒng)的工作原理,以及怎樣將滿(mǎn)足項(xiàng)目需求的定制的內(nèi)核變化加載到內(nèi)核中。你會(huì)了解用于驅(qū)動(dòng)不同體系結(jié)構(gòu)配置的機(jī)制和Linux內(nèi)核源碼樹(shù)的特性;更重要的是,掌握如何修改系統(tǒng)使之滿(mǎn)足自己的需求。除此之外,還深入探討了內(nèi)核命令行參數(shù)機(jī)制,介紹了它是如何工作的,如何根據(jù)需求配置內(nèi)核運(yùn)行時(shí)行為,如何擴(kuò)展系統(tǒng)功能,如何導(dǎo)航內(nèi)核源代碼,如何為相關(guān)嵌入式系統(tǒng)的不同任務(wù)配置內(nèi)核等內(nèi)容。國(guó)內(nèi)外研究現(xiàn)狀基于Linux平臺(tái)已經(jīng)存在多款多種媒體播放軟件,如:Xmovie,Xine,Realplayer,QuickTime,Mplayer等。其中既有以RealNetworks公司的RealPlayer和Apple公司的QuickTime為代表的商業(yè)軟件,也有以Xine、Mpalyer為代表的自由軟件。其中大部分都是具有較強(qiáng)的專(zhuān)用型,但缺乏較好的移植性,并且主流媒體播放器的設(shè)計(jì)都是基于桌面平臺(tái),雖然功能強(qiáng)大但是用戶(hù)必須利用桌面平臺(tái),人們更希望有專(zhuān)用播放器來(lái)代替PC的多媒體功能。隨著近幾年嵌入式市場(chǎng)的飛速發(fā)展,許多公司都著手進(jìn)行2嵌入式軟件的開(kāi)發(fā)和設(shè)計(jì),并且已經(jīng)研發(fā)出多種嵌入式產(chǎn)品,在這當(dāng)中就包括嵌入式媒體播放器。但是縱觀(guān)全局,并沒(méi)有任何一個(gè)嵌入式媒體播放器能夠像Microsoft公司的IE瀏覽器在桌面瀏覽器市場(chǎng)中一樣占據(jù)嵌入式媒體播放器市場(chǎng)的壟斷地位。主要是因?yàn)楝F(xiàn)有的嵌入式系統(tǒng)的發(fā)展非常迅速,而它們當(dāng)中的播放器大部分都是從桌面電腦系統(tǒng)上移植而來(lái),并沒(méi)有充分考慮到嵌入式系統(tǒng)的特殊性,如MicrosoftWindowsCE中附帶的播放器就是WindowsMediaPlayer的簡(jiǎn)化版,所以當(dāng)前市場(chǎng)上已經(jīng)出現(xiàn)的多種嵌入式媒體播放器在功能、速度、顯示和易用性等各方面的表現(xiàn)還不盡如人意,總的來(lái)說(shuō),它們存在的局限性大致可以分為下面幾類(lèi):1)可擴(kuò)展的能力不強(qiáng),大多不具備擴(kuò)展新媒體類(lèi)型的功能,或者僅支持新媒體類(lèi)型的擴(kuò)充,不支持傳輸協(xié)議的擴(kuò)充;2)部分播放器雖然可以運(yùn)行在多種平臺(tái)上,可移植性和擴(kuò)展性都比較好,但是其界面死板,易用性比較差;3)部分播放器雖然界面美觀(guān)、使用方便,具有專(zhuān)用的插件接口,但是不開(kāi)放源碼,并且只能運(yùn)行在特定的平臺(tái)上,所以其移植性不強(qiáng),擴(kuò)展性一般。從以上的幾點(diǎn)分析可以看出,一款好的媒體播放器需要功能強(qiáng)大、易于擴(kuò)展、界面美觀(guān)、使用方便,可以通過(guò)它達(dá)到娛樂(lè)或者學(xué)習(xí)的效果,滿(mǎn)足自己的視聽(tīng)享受。目前嵌入式媒體播放器仍然在不斷向前發(fā)展,除了繼續(xù)根據(jù)各種音視頻編解碼標(biāo)準(zhǔn)進(jìn)行升級(jí)和支持更多的應(yīng)用外,還在拓展其他的應(yīng)用模式和領(lǐng)域。例如在手機(jī)客戶(hù)端和瀏覽器技術(shù)、數(shù)字電視機(jī)頂盒技術(shù)集成,實(shí)現(xiàn)完整的數(shù)字電視軟件平臺(tái)和Java技術(shù)、DSP技術(shù)結(jié)合,解決實(shí)時(shí)性強(qiáng)的動(dòng)態(tài)視頻處理;將多媒體技術(shù)應(yīng)用到更多傳統(tǒng)的電器領(lǐng)域,以提供交互式的應(yīng)用等等。這些都說(shuō)明嵌入式媒體播放器有著非常廣闊的發(fā)展前景。論文主要完成的工作本課題所設(shè)計(jì)的視頻播放器是基于Qt的應(yīng)用程序框架。我所要做的首先系統(tǒng)的設(shè)計(jì)階段:主要包括需求分析和概要設(shè)計(jì)、界面設(shè)計(jì)等;可擴(kuò)展性架構(gòu)的設(shè)計(jì):包括環(huán)境的建立、系統(tǒng)的選擇、Qt的安裝及相應(yīng)的環(huán)境變量配置、Mplayer的后臺(tái)搭建。視頻播放器的代碼:主要基于Qt對(duì)播放器的界面進(jìn)行開(kāi)發(fā),并實(shí)現(xiàn)播放的功能。本文在研究了當(dāng)前音視頻編解碼技術(shù)、主流媒體文件格式、流媒體技術(shù)以及常見(jiàn)的GUI系統(tǒng)的基礎(chǔ)上,針對(duì)嵌入式Linux環(huán)境下對(duì)資源使用的特殊性,采用GTK+實(shí)現(xiàn)嵌入式媒體播放器的圖形用戶(hù)界面模塊,采用FFMpeg開(kāi)源解碼庫(kù)作為播放器的解碼器,它能夠支持多種音頻和視頻編解碼標(biāo)準(zhǔn),通過(guò)采用SDL來(lái)實(shí)現(xiàn)對(duì)音視頻的回放,最后采用NC機(jī)作為硬件環(huán)境對(duì)該播放器進(jìn)行功能測(cè)試,通過(guò)測(cè)試表明該媒體播放器符合設(shè)計(jì)要求,能夠滿(mǎn)足嵌入式設(shè)備的媒體播放要求。開(kāi)發(fā)平臺(tái)與開(kāi)發(fā)工具開(kāi)發(fā)平臺(tái)與工具在系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)中,軟件開(kāi)發(fā)平臺(tái)及開(kāi)發(fā)工作是關(guān)鍵。LinuxLinux是一套免費(fèi)使用和自由傳播的類(lèi)Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶(hù)、多任務(wù)、支持多線(xiàn)程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶(hù)網(wǎng)絡(luò)操作系統(tǒng)。Linux操作系統(tǒng)誕生于1991年的10月5日,Linux存在著許多不同的Linux版本,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,比如手機(jī)、平板電腦、路由器、視頻游戲控制臺(tái)、臺(tái)式計(jì)算機(jī)、大型機(jī)和超級(jí)計(jì)算機(jī)?,F(xiàn)列舉幾個(gè)常用命令如下:echo

命令舉例:echo$PATH。功能:將命令行中的參數(shù)顯示到標(biāo)準(zhǔn)輸出中。date命令舉例:date。功能:顯示或設(shè)置系統(tǒng)時(shí)間,沒(méi)參數(shù)直接顯示系統(tǒng)當(dāng)前的日期和時(shí)間。passwd命令舉例:passwd。功能:修改密碼。file命令舉例:file文件名【參數(shù)】。功能:確定指定文件類(lèi)型。ls命令舉例ls-a顯示當(dāng)前目錄下的全部文件(包括隱藏文件)。功能:列出目錄文件。touch命令舉例:touch【選項(xiàng)】文件名。功能:修改指定文件的時(shí)間標(biāo)簽或者創(chuàng)建一個(gè)空文件。選項(xiàng):-a僅改變指定文件的存取時(shí)間。UbuntuUbuntu(烏班圖)是一個(gè)以桌面應(yīng)用為主的Linux操作系統(tǒng),其名稱(chēng)來(lái)自非洲南部祖魯語(yǔ)或豪薩語(yǔ)的“ubuntu”一詞,意思是“人性”、“我的存在是因?yàn)榇蠹业拇嬖凇?,是非洲傳統(tǒng)的一種價(jià)值觀(guān),類(lèi)似華人社會(huì)的“仁愛(ài)”思想。Ubuntu基于Debian發(fā)行版和GNOME桌面環(huán)境,與Debian的不同在于它每6個(gè)月會(huì)發(fā)布一個(gè)新版本。Ubuntu的目標(biāo)在于為一般用戶(hù)提供一個(gè)最新的、同時(shí)又相當(dāng)穩(wěn)定的主要由自由軟件構(gòu)建而成的操作系統(tǒng)。Ubuntu具有龐大的社區(qū)力量,用戶(hù)可以方便地從社區(qū)獲得幫助。2013年1月3日,Ubuntu正式發(fā)布面向智能手機(jī)的移動(dòng)操作系統(tǒng)。Ubuntu由MarkShuttleworth(馬克·舍特爾沃斯,亦譯為沙特爾沃斯)創(chuàng)立,Ubuntu以Debian

GNU/Linux不穩(wěn)定分支為開(kāi)發(fā)基礎(chǔ),其首個(gè)版本于2004年10月20日發(fā)布。Debian依賴(lài)龐大的社區(qū),而不依賴(lài)任何商業(yè)性組織和個(gè)人。Ubuntu使用Debian大量資源,同時(shí)其開(kāi)發(fā)人員作為貢獻(xiàn)者也參與Debian社區(qū)開(kāi)發(fā)。Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架構(gòu),由全球化的專(zhuān)業(yè)開(kāi)發(fā)團(tuán)隊(duì)(CanonicalLtd)打造的開(kāi)源GNU/Linux操作系統(tǒng)。為桌面虛擬化提供支持平臺(tái)。Ubuntu對(duì)GNU/Linux的普及特別是桌面普及作出了巨大貢獻(xiàn),由此使更多人共享開(kāi)源的成果與精彩。QtCreatorQt是一個(gè)完整的C++應(yīng)用程序開(kāi)發(fā)框架。它包含一個(gè)類(lèi)庫(kù),和用于跨平臺(tái)開(kāi)發(fā)及國(guó)際化的工具。它是諾基亞開(kāi)發(fā)的一個(gè)跨平臺(tái)的c++圖形用戶(hù)界面應(yīng)用程序框架。它提供給應(yīng)用程序開(kāi)發(fā)者建立藝術(shù)級(jí)的圖形用戶(hù)界面所需的所用功能。QT是完全面向?qū)ο蟮?,很容易擴(kuò)展,并且允許真正地組件變成。QtCreator是一個(gè)用于Qt開(kāi)發(fā)的輕量級(jí)跨平臺(tái)集成開(kāi)發(fā)環(huán)境。QtCreator可帶來(lái)兩大關(guān)鍵益處:提供首個(gè)專(zhuān)為支持跨平臺(tái)開(kāi)發(fā)而設(shè)計(jì)的集成開(kāi)發(fā)環(huán)境(IDE),并確保首次接觸Qt框架的開(kāi)發(fā)人員能迅速上手和操作。即使不開(kāi)發(fā)Qt應(yīng)用程序,QtCreator也是一個(gè)簡(jiǎn)單易用且功能強(qiáng)大的IDE。從1996年,QT已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。QT也是流行的Linux桌面環(huán)境KDE的基礎(chǔ)。基本上,QT同XWindow上的Motif,Openwin,GTK等圖形界面庫(kù)和Windows平臺(tái)上的MFC,OWL,VCL,ATL是同類(lèi)型的東西,但是QT與其他開(kāi)發(fā)工具相比,具有優(yōu)良的跨平臺(tái)特性、面向?qū)ο?、豐富的API、大量的開(kāi)發(fā)文檔等優(yōu)點(diǎn)。信號(hào)和槽機(jī)制是QT的核心機(jī)制,信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是QT的核心特性,也是QT區(qū)別在于其他工具包的重要地方。信號(hào)和槽是QT自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的c/c++語(yǔ)言,因此要掙錢(qián)的處理信號(hào)和槽,必須借助一個(gè)成為MOC的QT工具,該工具是一個(gè)c++預(yù)處理程序,它可以為高層次的事件處理自動(dòng)生成所需要的附加代碼。GUI工具包是構(gòu)造圖形用戶(hù)界面所使用的一套按鈕、滾動(dòng)條、菜單和其他對(duì)象的集合。提供一個(gè)友好的用戶(hù)界面是GUI設(shè)計(jì)的一個(gè)宗旨,減少用戶(hù)的負(fù)擔(dān)、滿(mǎn)足用戶(hù)的需求、界面和用戶(hù)的互動(dòng)交流也是在GUI設(shè)計(jì)中其中必不可少的。一個(gè)出色的界面不僅能夠清晰的勾畫(huà)出所依托系統(tǒng)的大體結(jié)構(gòu),并且能夠大大減少操作的工作量和復(fù)雜性。在UNIX系統(tǒng)里,有很多可供使用的GUI庫(kù),其中之一就是Qt庫(kù)一個(gè)基于C++變成語(yǔ)言的工具包。它具有以下幾個(gè)優(yōu)點(diǎn):(1)可移植性Qt的一個(gè)主要設(shè)計(jì)目標(biāo)是使跨平臺(tái)程序開(kāi)發(fā)更加直觀(guān),便捷并富有趣味性。為了實(shí)現(xiàn)這一目標(biāo),Qt提取了窗口和操作系統(tǒng)的底層基礎(chǔ)構(gòu)造函數(shù),為程序員提供了有意義的一致邏輯界面。QtAPI在所有支持的平臺(tái)上都是相同的,Qt的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對(duì)于用戶(hù)開(kāi)發(fā)來(lái)說(shuō)是非常方便的。Qt提供了一種稱(chēng)為signals/slots的安全類(lèi)型來(lái)替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單。Qt支持下列操作系統(tǒng):MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,F(xiàn)reeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。(2)易用性和健全性Qt開(kāi)發(fā)這只需學(xué)習(xí)一個(gè)API,就能編寫(xiě)在所有平臺(tái)下運(yùn)行的程序。統(tǒng)一的跨平臺(tái)API使得程序員只需側(cè)重于程序本身的增值創(chuàng)新,不用擔(dān)心基礎(chǔ)代碼構(gòu)建和多平臺(tái)應(yīng)用的維護(hù)和管理。Qt對(duì)不同平臺(tái)的專(zhuān)門(mén)API進(jìn)行了封裝,如文件處理、網(wǎng)絡(luò),進(jìn)程處理、線(xiàn)程、數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)等。Qt軟件可以實(shí)現(xiàn)多編譯器的平穩(wěn)編譯,因此用Qt構(gòu)建的程序通常是非常健全的。Qt通過(guò)對(duì)所有子窗口內(nèi)存單元分配的處理,簡(jiǎn)化了內(nèi)存管理。程序員只需要側(cè)重于頂層對(duì)象的處理。Qt是一個(gè)C++工具包,它由幾百個(gè)C++類(lèi)構(gòu)成,你在程序中可以使用這些類(lèi)。因?yàn)镃++是面向?qū)ο蟮木幊陶Z(yǔ)言,而Qt是基于C++構(gòu)造,所以Qt也具有OOP的所有優(yōu)點(diǎn)。(3)運(yùn)行速度Qt非常容易使用,且具有很快的速度。這兩方面通常不可能同時(shí)達(dá)到。但當(dāng)談?wù)換t時(shí),其易用性和快速則是密不可分的。這一優(yōu)點(diǎn)要?dú)w功于Qt開(kāi)發(fā)者的辛苦工作,他們?cè)捹M(fèi)了大量的時(shí)間來(lái)優(yōu)化產(chǎn)品。另一個(gè)原因是它的表現(xiàn)方式。Qt是一個(gè)GUI仿真工具包,這意味著它不使用任何本地工具包作調(diào)用。Qt使用各自平臺(tái)上的低級(jí)繪圖函數(shù)仿真MSWindows和Motif,當(dāng)然,這能偶提高程序速度。由于Qt是基于C++,速度快,易于使用,并具有很好的可移植性。所以,當(dāng)需要開(kāi)發(fā)UNIX和MSWindows環(huán)境下的GUI程序時(shí),Qt是最佳選擇。Mplayer視頻播放器是指能播放以數(shù)字信號(hào)形式存儲(chǔ)的視頻的軟件,也指具有播放視頻功能的電子器件產(chǎn)品。除了少數(shù)波形文件外,大多數(shù)視頻播放器攜帶解碼器以還原經(jīng)過(guò)壓縮的媒體文件,視頻播放器還要內(nèi)置一整套轉(zhuǎn)換頻率以及緩沖的算法。MPlayer是一款開(kāi)源多媒體播放器,以GNU通用公共許可證發(fā)布。此款軟件可在各主流作業(yè)系統(tǒng)使用,例如Linux和其他類(lèi)Unix系統(tǒng)、Windows及MacOSX系統(tǒng)。MPlayer建基于命令行界面,在各作業(yè)系統(tǒng)也可選擇安裝不同的圖形界面。它的另一個(gè)大的特色是廣泛的輸出設(shè)備支持。大部分視頻和音頻格式都能通過(guò)FFmpeg項(xiàng)目的libavcodec函數(shù)庫(kù)本地支持。對(duì)于那些沒(méi)有開(kāi)源解碼器的格式,MPlayer使用二進(jìn)制的函數(shù)庫(kù)。它能直接使用Windows的DLL。專(zhuān)有的CSS解析軟件和相關(guān)格式使MPlayer成為被眾多開(kāi)放源代碼播放器所使用的后端。MPlayer的開(kāi)發(fā)始于2000年。最初的作者是ArpadGereoffy。MPlayer最初的名字叫"MPlayer-TheMoviePlayerforLinux",不過(guò)后來(lái)開(kāi)發(fā)者們簡(jiǎn)稱(chēng)其為"MPlayer-TheMoviePlayer",原因是MPlayer已經(jīng)不僅可以用于Linux而可以在所有平臺(tái)上運(yùn)行。第一個(gè)版本被稱(chēng)為mpg12playv0.1,并且將libmpeg3在一個(gè)半小時(shí)之內(nèi)集成到其中。之后的版本mpg12playv0.95pre5里被加入了基于avifile的Win32DLLloader的AVI播放功能,從2000年11月MPlayerv0.3之后的版本都一直保留著該功能。最初絕大多數(shù)的開(kāi)發(fā)者都來(lái)自于匈牙利,開(kāi)發(fā)者遍布全球。自從2003年AlexBeregszászi開(kāi)始接替準(zhǔn)備開(kāi)發(fā)第二代MPlayer的ÁrpádGereöffy來(lái)維護(hù)該項(xiàng)目。MPlayerG2由于多種原因暫停開(kāi)發(fā)。Mplayer的特色主要有以下幾個(gè):(1)內(nèi)置多種解碼器MPlayer本身編譯自帶了多種類(lèi)型的解碼器,不需要再安裝xvid、ffdshow、ac3filter、ogg、vobsub等等所謂看DVDrip必備解碼器,也不會(huì)跟你的電腦原來(lái)所安裝的解碼器有任何沖突。(2)拖動(dòng)極速播放器MPlayer相對(duì)其它播放器來(lái)說(shuō),資源占用非常少,不需要任何系統(tǒng)解碼器就可以播放各種媒體格式,對(duì)于MPEG/XviD/DivX格式的文件支持尤其好,不僅拖動(dòng)播放速度快得不可思議,而且播放破損文件時(shí)的效果也好得出奇,在低配置的機(jī)器上使用更是能凸顯優(yōu)勢(shì)。(3)強(qiáng)大的音頻支持MPlayer廣泛地支持音視頻輸出驅(qū)動(dòng)。它不僅可以使用X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、libcaca、DirectFB、Quartz、MacOSXCoreVideo,也能使用GGI,SDL(及它們的所有驅(qū)動(dòng)),所有VESA兼容顯卡上的VESA(甚至不需要X11),某些低級(jí)的顯卡相關(guān)的驅(qū)動(dòng)(如Matrox、3dfx及ATI)和一些硬件MPEG解碼器卡,比如SiemensDVB、HauppaugePVR(IVTV)、DXR2和DXR3/Hollywood+。它們中絕大多數(shù)支持軟件或硬件縮放,所以你可以享受全屏電影。(4)OSD功能MPlayer具有OSD(屏上顯示)功能顯示狀態(tài)信息,有抗鋸齒帶陰影的漂亮大字幕和鍵盤(pán)控制的可視反饋。支持的字體包括歐洲語(yǔ)種/ISO8859-1,2(匈牙利語(yǔ)、英語(yǔ)、捷克語(yǔ)等等),西里爾語(yǔ)和韓語(yǔ),可以播放12種格式的字幕文件(MicroDVD、SubRip、OGM、SubViewer、Sami、VPlayer、RT、SSA、AQTitle、JACOsub、PJS及我們自己的:MPsub)和DVD字幕(SPU流、VOBsub及隱藏式CC字幕)。(5)MEncoderMEncoder(MPlayer'sMovieEncoder)是一個(gè)簡(jiǎn)單的電影編碼器,設(shè)計(jì)用來(lái)把MPlayer可以播放的電影(AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA)編碼成別的MPlayer可以播放的格式。它可以使用各種編解碼器進(jìn)行編碼,例如DivX4(1或2passes)、libavcodec、PCM/MP3/VBRMP3音頻。同時(shí)也有強(qiáng)大的插件系統(tǒng)用于控制視頻。相關(guān)技術(shù)音視頻編解碼技術(shù)音視頻壓縮編解碼技術(shù)是媒體播放器的核心技術(shù)之一,通常使用在計(jì)算機(jī)、數(shù)據(jù)庫(kù)、通信、數(shù)字電視和交互式系統(tǒng)中的關(guān)鍵多媒體技術(shù)。從目前的主要的壓縮編解碼技術(shù)來(lái)看,雖然被人們經(jīng)常應(yīng)用的技術(shù)有很多種,但是得到廣泛的市場(chǎng)認(rèn)可的主要標(biāo)準(zhǔn)有國(guó)際標(biāo)準(zhǔn)化組織(ISO)的MPEG(MovingPict=uresExpertsGroup)系列標(biāo)準(zhǔn)、國(guó)際電信聯(lián)盟(ITU)和國(guó)際標(biāo)準(zhǔn)化組織聯(lián)合提出的H.264標(biāo)準(zhǔn)、以及Microsoft的WMV標(biāo)準(zhǔn),以下是對(duì)這三種標(biāo)準(zhǔn)技術(shù)的介紹。MPEG標(biāo)準(zhǔn)MPEG(動(dòng)態(tài)圖像專(zhuān)家組)成立于1988年,它是視頻編碼標(biāo)準(zhǔn)中一個(gè)大的集合,也是我們平時(shí)日常生活當(dāng)中所見(jiàn)到的最普遍的視頻標(biāo)準(zhǔn)。MPEG標(biāo)準(zhǔn)主要有以下五個(gè),MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。MPEG標(biāo)準(zhǔn)的視頻壓縮編碼技術(shù)主要利用了具有運(yùn)動(dòng)補(bǔ)償?shù)膸g壓縮編碼技術(shù)以減小時(shí)間冗余度,利用DCT技術(shù)以減小圖像的空間冗余度,利用熵編碼則在信息表示方面減小了統(tǒng)計(jì)冗余度。這幾種技術(shù)的綜合運(yùn)用,大大增強(qiáng)了壓縮性能。該專(zhuān)家組建于1988年,專(zhuān)門(mén)負(fù)責(zé)為CD建立視頻和音頻標(biāo)準(zhǔn),而成員是為視頻、音頻及系統(tǒng)領(lǐng)域的技術(shù)專(zhuān)家。他們成功將聲音和影像的記錄脫離了傳統(tǒng)的模擬方式,制定出MPEG-格式,從此視聽(tīng)傳播方面進(jìn)入了數(shù)碼化時(shí)代。MPEG-1音視頻壓縮是為了儲(chǔ)存和發(fā)布數(shù)字音視頻而建立起來(lái)的壓縮格式。它制定于1992年,是為工業(yè)級(jí)標(biāo)準(zhǔn)而設(shè)計(jì),可適用于不同帶寬的設(shè)備,如CD-ROM、Video-CD、CD-i。它可針對(duì)SIF標(biāo)準(zhǔn)分辨率(對(duì)于NTSC制為352×240;對(duì)于PAL制為352×288)的圖象進(jìn)行壓縮,傳輸速率為1.5Mbits/sec,每秒播放30幀,具有CD(指激光唱盤(pán))音質(zhì),質(zhì)量級(jí)別基本與VHS相當(dāng)。MPEG-1也被用于數(shù)字電話(huà)網(wǎng)絡(luò)上的視頻傳輸,如非對(duì)稱(chēng)數(shù)字用戶(hù)線(xiàn)路(ADSL),視頻點(diǎn)播(VOD),以及教育網(wǎng)絡(luò)等。MPEG-2音視頻編碼是在MPEG-1基礎(chǔ)上的擴(kuò)展,MPEG-2能適應(yīng)高碼流的要求,特別適合高清電視(HDTV),其可支持的碼流為1.5-60Mbps。MPEG-2的音頻編碼可提供左右中及兩個(gè)環(huán)繞聲道,以及一個(gè)加重低音聲道,和多達(dá)7個(gè)伴音聲道(DVD可有8種語(yǔ)言配音的原因),MPEG-2還可用于為廣播,有線(xiàn)電視網(wǎng),電纜網(wǎng)絡(luò)以及衛(wèi)星直播(DirectBroadcastSatellite)提供廣播級(jí)的數(shù)字視頻。MPEG-2的其中一個(gè)特點(diǎn)是可提供一個(gè)較廣的范圍改變壓縮比,以適應(yīng)不同畫(huà)面質(zhì)量、存儲(chǔ)容量、以及帶寬的要求。為適應(yīng)在互聯(lián)網(wǎng)上多媒體數(shù)據(jù)的靈活傳輸,ISO/IEC于1998年又發(fā)布了MPEG-4標(biāo)準(zhǔn),MPEG-4是基于音/視頻對(duì)象的可分級(jí)編碼技術(shù),其碼率可從5Kbps-2Mbps的范圍內(nèi)變化,它綜合了數(shù)字電視、交互圖形學(xué)和Internet等領(lǐng)域的技術(shù)。它在要求高效壓縮編碼的同時(shí),強(qiáng)調(diào)多媒體網(wǎng)絡(luò)通信的靈活性和交互性。這個(gè)標(biāo)準(zhǔn)主要應(yīng)用于視像電話(huà)、視像電子郵件和電子新聞等,對(duì)傳輸速率要求較低。MPEG-4利用很窄的帶寬,通過(guò)幀重建技術(shù)進(jìn)行數(shù)據(jù)壓縮,以求用最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量。與MPEG-1和MPEG-2相比,MPEG-4的優(yōu)點(diǎn)是特別針對(duì)低帶寬等條件設(shè)計(jì)算法,所以MPEG-4的壓縮比更高,使低碼率的視頻傳輸成為可能。在公用電話(huà)線(xiàn)上可以連續(xù)傳輸視頻,并能保持圖像的質(zhì)量,這是其它技術(shù)做不到的。其次它節(jié)省存儲(chǔ)空間,在同等條件如場(chǎng)景、圖像格式和壓縮分辨率條件下,經(jīng)過(guò)編碼處理的圖像文件越小,所占用的存儲(chǔ)空間越小。由于MPEG-4算法較MPEG-1、MPEG-2更為優(yōu)化,因而在壓縮效率上更高。(2)H.264標(biāo)準(zhǔn)H.264是在早期視頻編碼標(biāo)準(zhǔn)的運(yùn)動(dòng)補(bǔ)償轉(zhuǎn)換編碼范例基礎(chǔ)上創(chuàng)建的。它是ITU-T的VCEG(視頻編碼專(zhuān)家組)和ISO/IEC的MPEG(活動(dòng)圖像編碼專(zhuān)家組)組成的聯(lián)合視頻組(JointVideoTeam,JVT)開(kāi)發(fā)的一個(gè)新的數(shù)字視6頻編碼標(biāo)準(zhǔn),它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10部分。H.264較早期的MPEG-2標(biāo)準(zhǔn)相比,該標(biāo)準(zhǔn)大大降低了比特速率。該技術(shù)不受早期標(biāo)準(zhǔn)所用構(gòu)建模塊的制約,整個(gè)技術(shù)的設(shè)計(jì)無(wú)需后向兼容性。H.264提供的一些可提高壓縮效率的重要編碼工具有:改進(jìn)型空間交互預(yù)報(bào)、增強(qiáng)型時(shí)間預(yù)報(bào)(通過(guò)四分之一采樣運(yùn)動(dòng)補(bǔ)償、可變模塊大小運(yùn)動(dòng)補(bǔ)償、多重假設(shè)運(yùn)動(dòng)補(bǔ)償和加權(quán)預(yù)測(cè)工具實(shí)現(xiàn))、高效的基于上下文的熵編碼(通過(guò)變長(zhǎng)度編碼或二進(jìn)制運(yùn)算編碼工具實(shí)現(xiàn))以及內(nèi)環(huán)內(nèi)容和編碼模式適應(yīng)性解鎖濾波。實(shí)驗(yàn)表明,要實(shí)現(xiàn)相近的視覺(jué)質(zhì)量,同MPEG-4ASP編碼相比,H.264把比特速率降低了35%到50%,同MPEG-2相比,降低了40%到65%。另外,同MPEG-4SP相比,H.264BP可以在寬廣的比特速率范圍內(nèi)把峰值信噪比降低50%以上。(3)WMV標(biāo)準(zhǔn)WMV(WindowsMediaVideo)標(biāo)準(zhǔn),是Microsoft公司所推出的一種采用獨(dú)立編碼方式并且可以直接在網(wǎng)上實(shí)時(shí)觀(guān)看視頻節(jié)目的文件壓縮格式。由WMV標(biāo)準(zhǔn)生成的文件一般同時(shí)包含視頻和音頻部分。視頻部分使用WindowsMediaVideo編碼,音頻部分使用WindowsMediaAudio編碼。它是在Microsoft公司的另外一種文件格式ASF(AdvancedStreamFormat)升級(jí)延伸而來(lái)得。它作為一種經(jīng)久不衰的音視頻編碼標(biāo)準(zhǔn),一直在不斷的改進(jìn)。WMV格式的主要優(yōu)點(diǎn)包括:本地或網(wǎng)絡(luò)回放、可擴(kuò)充的媒體類(lèi)型、部件下載、可伸縮的媒體類(lèi)型、流的優(yōu)先級(jí)化、多語(yǔ)言支持、環(huán)境獨(dú)立性、豐富的流間關(guān)系以及擴(kuò)展性等。主流媒體文件格式目前的主流媒體文件格式有:avi、RealMedia的rm和rmvb格式,WindowsMedia的asf、wmv格式,mp4和3gp,QuickTime的qt格式等。下面將對(duì)上述幾種媒體文件格式進(jìn)行簡(jiǎn)要的分析。(1)avi格式Avi英文全程是AudioVideoInterleaved,即“音頻視頻交錯(cuò)”,就是可以將視頻和音頻交織在一起進(jìn)行同步播放,可以跨多個(gè)平臺(tái)使用。文件體積過(guò)大是他的缺陷,而且壓縮標(biāo)準(zhǔn)不統(tǒng)一,因此經(jīng)常會(huì)遇到高版本W(wǎng)indows媒體播放器播放不了采用早期編碼編輯的AVI格式視頻,而低版本W(wǎng)indows媒體播放器又播放不了采用最新編碼編輯的AVI格式視頻。所以在使用時(shí)常常需要臨時(shí)下載更新編碼編輯器。(2)RealMedia的rm和rmvb格式RealMedia是RealNetworks公司所開(kāi)發(fā)的流式音頻、視頻文件格式,主要用來(lái)在低速率的網(wǎng)絡(luò)上實(shí)時(shí)傳播活動(dòng)視頻影像,可以根據(jù)網(wǎng)絡(luò)數(shù)據(jù)傳輸速率的不同而7采用不同的壓縮比率,從而實(shí)現(xiàn)影像數(shù)據(jù)的實(shí)時(shí)傳播和播放。RealMedia包括:rm(RealVideo)、ra(RealAudio)和RealFlash三類(lèi)文件。rm用來(lái)傳播連續(xù)視頻數(shù)據(jù),ra用來(lái)傳播CD音質(zhì)的音頻數(shù)據(jù),而RealFlash則是RealNetworks公司與Macromedia公司共同推出的采用矢量技術(shù)的動(dòng)畫(huà)格式。作為最早的Internet流式技術(shù),在音視頻方面RealMedia已成為事實(shí)上的網(wǎng)絡(luò)音視頻播放標(biāo)準(zhǔn)。RMVB這是一種由RM視頻格式升級(jí)延伸出的新視頻格式,它的先進(jìn)之處在于RMVB視頻格式打破了原先RM格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎(chǔ)上合理利用比特率資源,就是說(shuō)靜止和動(dòng)作場(chǎng)面少的畫(huà)面場(chǎng)景采用較低的編碼速率,這樣可以留出更多的帶寬空間,而這些帶寬會(huì)在出現(xiàn)快速運(yùn)動(dòng)的畫(huà)面場(chǎng)景時(shí)被利用。這樣在保證了靜止畫(huà)面質(zhì)量的前提下,大幅地提高了運(yùn)動(dòng)圖像的畫(huà)面質(zhì)量,從而圖像質(zhì)量和文件大小之間就達(dá)到了微妙的平衡。(3)WindowsMedia的asf、wmv格式ASF是(Advanced

Streaming

Format

高級(jí)串流格式)的縮寫(xiě),是

Microsoft

Windows

98

所開(kāi)發(fā)的串流多媒體文件格式。WindowsMedia是Microsoft提出的信息流式播放方案。其核心是ASF(AdvancedStreamFormat)文件,是一種包含音頻、視頻、圖像以及控制命令、腳本等多媒體信息的數(shù)據(jù)格式。這個(gè)詞匯當(dāng)前可和

WMA

WMV

互換使用。ASF支持任意的壓縮/解壓縮編碼方式,并可以使用任何一種底層網(wǎng)絡(luò)傳輸協(xié)議,具有很大的靈活性。并將ASF用作Windows版本中多媒體內(nèi)容的標(biāo)準(zhǔn)文件格式,這無(wú)疑將對(duì)Internet特別是流式技術(shù)的應(yīng)用和發(fā)展產(chǎn)生重大影響。ASF最大優(yōu)點(diǎn)就是體積小,因此適合網(wǎng)絡(luò)傳輸,也同樣適于在本地播放。用戶(hù)可以將圖形、聲音和動(dòng)畫(huà)數(shù)據(jù)組合成一個(gè)ASF格式的文件,當(dāng)然也可以將其他格式的視頻和音頻轉(zhuǎn)換為ASF格式,而且用戶(hù)還可以通過(guò)聲卡和視頻捕獲卡將諸如麥克風(fēng)、錄像機(jī)等等外設(shè)的數(shù)據(jù)保存為ASF格式。WMV是微軟推出的一種流媒體格式,它是在“同門(mén)”的ASF(AdvancedStreamFormat)格式升級(jí)延伸來(lái)得。在同等視頻質(zhì)量下,WMV格式的體積非常小,因此很適合在網(wǎng)上播放和傳輸。WMV不是僅僅基于微軟公司的自有技術(shù)開(kāi)發(fā)的。從第七版(WMV1)開(kāi)始,微軟公司開(kāi)始使用它自己非標(biāo)準(zhǔn)MPEG-4Part2。但是,由于WMV第九版已經(jīng)是SMPTE的一個(gè)獨(dú)立標(biāo)準(zhǔn)(421M,也稱(chēng)為VC-1),所以WMV的發(fā)展已經(jīng)不象MPEG-4那樣是一個(gè)它自己專(zhuān)有的編解碼技術(shù)。(4)Mp4和3pg目前MP4最流行使用的壓縮方式為MPEG-4。移動(dòng)手持設(shè)備視頻多數(shù)支持此格式,但由于硬件平臺(tái)的沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),軟件系統(tǒng)也是由廠(chǎng)商自行設(shè)計(jì),各種設(shè)備可播放的MP4編碼方式也不同。3gp使用MPEG-4或H.263

兩種影片編碼方式,以及

AMR-NB或AAC-LC兩種聲音儲(chǔ)存方式,可以將影片以更經(jīng)濟(jì)的方式存放在手機(jī)或是其他行動(dòng)裝置里,所以它最大的優(yōu)點(diǎn)就是:容量小。(5)QuickTime的qt格式QuickTime的qt格式是Apple公司于1991年推出的能在計(jì)算機(jī)上播放高品質(zhì)視頻圖像的技術(shù),它幾乎支持所有主流的個(gè)人計(jì)算平臺(tái)和各種格式的靜態(tài)圖像文件、視頻和動(dòng)畫(huà)格式,支持RLC、JPEG等領(lǐng)先的集成壓縮技術(shù),提供了大約150多種視頻效果。具有內(nèi)置Web瀏覽器插件(Plug-in)技術(shù),支持IETF流標(biāo)準(zhǔn)以及FTP和HTTP等網(wǎng)絡(luò)協(xié)議,現(xiàn)已成為是數(shù)字媒體領(lǐng)域的工業(yè)標(biāo)準(zhǔn)。QuickTime的qt電影文件格式定義了存儲(chǔ)數(shù)字媒體內(nèi)容的標(biāo)準(zhǔn)方法,不僅可以存儲(chǔ)單個(gè)的媒體內(nèi)容(如視頻幀或音頻采樣),而且能保存對(duì)該媒體作品的完整描述;QuickTime的qt文件格式被設(shè)計(jì)用來(lái)適應(yīng)為與數(shù)字化媒體一同工作需要存儲(chǔ)的各種數(shù)據(jù)。因?yàn)檫@種文件格式能用來(lái)描述幾乎所有的媒體結(jié)構(gòu),所以它是應(yīng)用程序間(不管運(yùn)行平臺(tái)如何)交換數(shù)據(jù)的理想格式。qt文件格式中媒體描述和媒體數(shù)據(jù)是分開(kāi)存儲(chǔ)的,媒體描述或元數(shù)據(jù)(meta-data)叫做電影(movie),包含軌道數(shù)目、視頻壓縮格式和時(shí)間信息。同時(shí)movie包含媒體數(shù)據(jù)存儲(chǔ)區(qū)域的索引。媒體數(shù)據(jù)是所有的采樣數(shù)據(jù),如視頻幀和音頻采樣,媒體數(shù)據(jù)可以與QuickTimemovie存儲(chǔ)在同一個(gè)文件中,也可以在一個(gè)單獨(dú)的文件或者在幾個(gè)文件中。流媒體技術(shù)流媒體是指在Internet/Intranet中使用流式傳輸技術(shù)的連續(xù)時(shí)基媒體,如音頻、視頻等多媒體文件。在網(wǎng)絡(luò)上傳統(tǒng)的多媒體文件的傳輸方式,基本上只有文本、圖像可以按照原格式在網(wǎng)上傳輸,動(dòng)畫(huà)、音頻、視頻等雖然可以直接在網(wǎng)上播放,但文件偏大,即使使用專(zhuān)線(xiàn)上網(wǎng),也要等完全下載后才能觀(guān)看。流式傳輸方式可將視頻、音頻、動(dòng)畫(huà)等多媒體文件經(jīng)編碼工具的特殊處理,分成一個(gè)個(gè)壓縮包,由流媒體服務(wù)器向用戶(hù)計(jì)算機(jī)連續(xù)、實(shí)時(shí)傳送。在采用流式傳輸方式的系統(tǒng)中,用戶(hù)不必等到整個(gè)文件全部下載完畢,只需經(jīng)過(guò)幾秒或幾十秒的啟動(dòng)延遲即可觀(guān)看,文件的其余部分將在后臺(tái)服務(wù)器繼續(xù)下載。該技術(shù)首先在用戶(hù)端的計(jì)算機(jī)上創(chuàng)建一個(gè)緩沖區(qū),預(yù)先下載多媒體文件的部分?jǐn)?shù)據(jù)作為緩沖,播放程序讀取緩沖區(qū)內(nèi)的數(shù)據(jù)進(jìn)行播放。在播放的同時(shí),用戶(hù)計(jì)算機(jī)在后臺(tái)繼續(xù)下載多媒體文件的剩余部分填充緩沖區(qū)。這樣,當(dāng)網(wǎng)絡(luò)出現(xiàn)抖動(dòng)(Jitter),實(shí)際連線(xiàn)速度小于播放消耗數(shù)據(jù)速度時(shí),可以避免播放的中斷,也使得播放質(zhì)量得以維持。流媒體技術(shù)是為解決以Internet為代表的中低帶寬網(wǎng)絡(luò)上多媒體信息傳輸問(wèn)題而產(chǎn)生、發(fā)展起來(lái)的一種網(wǎng)絡(luò)新技術(shù),可適應(yīng)從窄帶到寬帶任意的網(wǎng)絡(luò)帶寬。目前,實(shí)現(xiàn)流媒體傳輸主要有兩種方式:實(shí)時(shí)流(realtimestreaming)傳輸和順序流(progressivestreaming)傳輸。一般來(lái)說(shuō),如使用HTTP服務(wù)器,文件即通過(guò)順序流發(fā)送,即為順序流傳輸。如視頻為實(shí)時(shí)廣播,或使用流傳輸媒體服務(wù)器,或應(yīng)用如RTSP的實(shí)時(shí)協(xié)議,即為實(shí)時(shí)流傳輸。采用哪種傳輸方式依賴(lài)于不同需求,兩種方式有著不同特點(diǎn):順序流傳輸是順序下載,在下載文件的同時(shí)用戶(hù)可觀(guān)看在線(xiàn)媒體,在給定時(shí)刻,用戶(hù)只能觀(guān)看自己下載的那部分,而不能跳到還未下載的部分,順序流傳輸不像實(shí)時(shí)流在傳輸期間根據(jù)用戶(hù)連接的速度做調(diào)整。由于標(biāo)準(zhǔn)的HTTP服務(wù)器可發(fā)送這種形式的文件,不需要其他協(xié)議,它經(jīng)常被稱(chēng)作HTTP流傳輸。順序流傳輸比較適合高質(zhì)量的短片段,如片頭、片尾和廣告。由于文件傳輸是無(wú)損下載的,這種方法保證電影播放的最終質(zhì)量。這意味著用戶(hù)在觀(guān)看前,必須經(jīng)歷延時(shí),對(duì)較慢的連接尤其如此。實(shí)時(shí)流傳輸保證媒體信號(hào)帶寬與網(wǎng)絡(luò)連接匹配,使媒體可被實(shí)時(shí)觀(guān)看到。實(shí)時(shí)流媒體傳輸需要專(zhuān)用的流媒體服務(wù)器與傳輸協(xié)議。實(shí)時(shí)流傳輸總是實(shí)時(shí)傳送,特別適合現(xiàn)場(chǎng)事件,也支持隨機(jī)訪(fǎng)問(wèn),用戶(hù)可快進(jìn)或后退以觀(guān)看前面或后面的內(nèi)容。其必須匹配連接帶寬,這意味著以調(diào)制解調(diào)器速率連接時(shí)圖像質(zhì)量較差。而且,由于出錯(cuò)丟失的信息被忽略掉,網(wǎng)絡(luò)擁擠或出現(xiàn)問(wèn)題時(shí),視頻質(zhì)量很差。實(shí)時(shí)流傳輸需要特定服務(wù)器,如QuickTime,StreamingServer,RealServer。這些服務(wù)器允許用戶(hù)對(duì)媒體發(fā)送進(jìn)行更多級(jí)別的控制,因此系統(tǒng)設(shè)置、管理比標(biāo)準(zhǔn)HTTP服務(wù)器更復(fù)雜。而流媒體的實(shí)現(xiàn)原理簡(jiǎn)單地說(shuō),就是通過(guò)采用高效的壓縮算法,在降低文件大小的同時(shí)伴隨質(zhì)量的損失,讓原有的龐大的多媒體數(shù)據(jù)適合流式傳輸。然后通過(guò)架設(shè)流媒體服務(wù)器,利用各種實(shí)時(shí)協(xié)議傳輸流數(shù)據(jù)。Figure2.1Streamingmediaimplementationprinciple多媒體數(shù)據(jù)必須進(jìn)行預(yù)處理才能適合流式傳輸,這是因?yàn)槟壳暗木W(wǎng)絡(luò)帶寬相對(duì)多媒體巨大的數(shù)據(jù)流量來(lái)說(shuō)還顯得遠(yuǎn)遠(yuǎn)不夠。預(yù)處理主要包括兩方面:一是采用先進(jìn)高效的壓縮算法;二是加入一些附加信息把壓縮媒體轉(zhuǎn)為適合流式傳輸?shù)奈募袷?。其技巧在于壓縮原始的A/V內(nèi)容,使其能夠在窄帶或?qū)拵ǖ郎弦粤鞯姆绞絺鹘o用戶(hù)。預(yù)處理在編碼器內(nèi)完成,編碼方式的選擇可以是多種多樣的。編碼過(guò)程是一種藝術(shù),應(yīng)該考慮不同編碼速度的定制性能、包損失的容錯(cuò)性與網(wǎng)絡(luò)的帶寬波動(dòng)、最低速度下好的A/V品質(zhì)、編碼/流式傳送的成本、流的控制以及其他方面。目前流媒體播放技術(shù)市場(chǎng)上主流的流媒體技術(shù)有三種,分別是:RealNetworks公司的RealMedia;Microsoft公司的WindowsMedia和Apple公司的QuiekTime。這三家公司的技術(shù)都有自己的專(zhuān)利算法、專(zhuān)利文件格式甚至專(zhuān)利傳輸控制協(xié)議。下面就這三種技術(shù)進(jìn)行簡(jiǎn)要的介紹:(1)Apple公司的QuiekTime技術(shù)Apple公司的QuickTime適用于MacOS和Windows的跨平臺(tái)的多媒體體系結(jié)構(gòu)。它包括一系列多媒體操作系統(tǒng)擴(kuò)展(就像Windows里的DLL被執(zhí)行)、一個(gè)全面的API、文件格式和一系列用戶(hù)應(yīng)用比如說(shuō)QuickTimePlayer,theQuickTimeActiveXcontrol和theQuickTimebrowserplug-in。QuickTime是一個(gè)完全的多媒體體系結(jié)構(gòu)而不僅僅是一個(gè)媒體播放器。它支持創(chuàng)建、產(chǎn)生和傳送各種廣泛的媒體文件。QuickTime提供了對(duì)于整個(gè)進(jìn)程的端到端的支持:實(shí)時(shí)的捕獲媒體信號(hào)、有步驟的合成媒體信號(hào)、輸入輸出媒體當(dāng)前媒體和編輯、合成、壓縮、傳輸用戶(hù)的重放。QuickTime的體系結(jié)構(gòu)是由靈活的工具集和插件組件構(gòu)成的。為了支持全面的多媒體任務(wù),QuickTimeAPI包括采集工具集(如電影工具箱,圖象壓縮管理器,序列截圖器等)和QuickTime流API。電影工具箱用來(lái)初始化QuickTime:實(shí)時(shí)的打開(kāi)、播放、編輯和保存電影文件;圖象壓縮器是獨(dú)立于設(shè)9備和驅(qū)動(dòng)壓縮的壓縮和解壓縮圖象數(shù)據(jù);序列截圖器是一種從一些實(shí)時(shí)的數(shù)據(jù)源(比如視頻采集卡或者音頻輸入)捕獲和記錄采樣的組件框架;QuickTime流API是用來(lái)可以使用標(biāo)準(zhǔn)流協(xié)議(比如RTP,RTSP)來(lái)發(fā)送和接收實(shí)時(shí)流數(shù)據(jù)。此外還有一些其他的工具集,如QuickTime虛擬區(qū),精靈助手工具箱和有線(xiàn)電影API。不同的工具集通常分享數(shù)據(jù)類(lèi)型和范例設(shè)計(jì),使得進(jìn)行后續(xù)開(kāi)發(fā)變的簡(jiǎn)單。當(dāng)想進(jìn)入QuickTime通常自動(dòng)處理的任務(wù)時(shí)許多工具集是非常有用的。例如;當(dāng)要用到電影工具箱來(lái)播放電影時(shí),它可能不需用戶(hù)和流API或者圖形壓縮管理器來(lái)交互就能打開(kāi)實(shí)時(shí)流數(shù)據(jù)和解壓縮一系列的圖片,但是要檢查流的丟包或者確定圖片每個(gè)時(shí)間的解壓縮情況就可以使用恰當(dāng)?shù)墓ぞ呒瘉?lái)實(shí)現(xiàn)。QuickTime的體系結(jié)構(gòu)廣泛的使用組件,使得它模塊化、靈活和可擴(kuò)展。一個(gè)QuickTime的組件可以分享到已被定義的API的源代碼??梢园研碌慕M件加入到QuickTime里并當(dāng)在實(shí)際應(yīng)用到它時(shí)會(huì)被自動(dòng)加載,這主要是因?yàn)樗同F(xiàn)有存在的普通版本類(lèi)型響應(yīng)的是同一個(gè)API。例如當(dāng)QuickTime工作在一些媒體類(lèi)型(音頻、視頻、文本、精靈、Flash、3D模塊、圖片虛擬社區(qū)和其他)時(shí),每一個(gè)媒體類(lèi)型都被媒體處理組件所支持,組件所支持的媒體數(shù)目和類(lèi)型在不斷的增加,用戶(hù)可以通過(guò)創(chuàng)建一新的媒體處理組件來(lái)增加新的媒體類(lèi)型給QuickTime。(2)RealNetworks公司的RealMedia技術(shù)RealNetworks公司是世界領(lǐng)先的網(wǎng)上流式音視頻解決方案的提供者,提供從制作端、服務(wù)器端到客戶(hù)端的所有產(chǎn)品。其在20世紀(jì)90年代中期首先推出了流媒體技術(shù),并隨著互聯(lián)網(wǎng)的急速發(fā)展而壯大了自身,在市場(chǎng)上處于主動(dòng)地位,并擁有最多的用戶(hù)數(shù)量,它的客戶(hù)端播放器RealPlayer的全球注冊(cè)人數(shù)已經(jīng)超過(guò)了1.6億人。RealNetworks公司是世界領(lǐng)先的網(wǎng)上流式視音頻解決方案的提供者,提供從制作端、服務(wù)器端到客戶(hù)端的所有產(chǎn)品。RealNetworks公司最新的網(wǎng)上流式視音頻解決方案叫RealSystemIQ,RealSystemIQ容易安裝,在高、低帶寬條件下均可提供良好的視音頻質(zhì)量,但價(jià)格較貴。RealMedia通過(guò)基于SMIL并結(jié)合自己的RealPix和RealText技術(shù)來(lái)達(dá)到一定的交互能力和媒體控制能力,不過(guò)相比QuickTime來(lái)說(shuō)還有一段距離。下面介紹一下RealMedia技術(shù)的特點(diǎn):a.RealVideo代表了影像編碼技術(shù)從撥號(hào)上網(wǎng)到寬帶網(wǎng)的量的飛躍。b.Macintosh版本現(xiàn)在完全支持實(shí)時(shí)廣播;VBR(variablebitrate)影像壓縮。這個(gè)特征使影像數(shù)字信號(hào)編解碼器,在工作中能根據(jù)被編碼內(nèi)容的不同自動(dòng)調(diào)整比特律,改善了窄帶和寬帶影像的品質(zhì);c.TwoPassVideo影像壓縮。雙認(rèn)證編碼在對(duì)輸入的影像編碼前,會(huì)分析影像數(shù)據(jù)。在第一次認(rèn)證時(shí)將對(duì)整個(gè)影像片斷進(jìn)行分析,尋找過(guò)渡和復(fù)雜之處,在第二次認(rèn)證時(shí),根據(jù)第一次認(rèn)證得到的分析數(shù)據(jù)對(duì)影像片斷進(jìn)行編碼。把VBR(有效位寄存器)和雙認(rèn)證編碼技術(shù)結(jié)合,對(duì)互聯(lián)網(wǎng)上寬帶視頻質(zhì)量的改善起到了不可低估的作用;d.RealVideo預(yù)過(guò)濾.雙預(yù)過(guò)濾技術(shù)的引入,為寬帶RealVideo過(guò)濾了許多細(xì)節(jié)上的不足之處;e.交織過(guò)濾技術(shù)用在對(duì)NTSC或PAL格式的影像編碼處,此技術(shù)將會(huì)過(guò)濾“所謂的人為因素”;f.反轉(zhuǎn)電視電影。電影通常以每秒24幀(fps)的速率進(jìn)行拍攝。當(dāng)一部電影以30fps轉(zhuǎn)變成數(shù)字影像時(shí),額外的幀通過(guò)合并或復(fù)制被加入進(jìn)來(lái)。film-to-video變換過(guò)程被稱(chēng)為電視電影反轉(zhuǎn)。電視電影過(guò)濾器在這個(gè)過(guò)程中尋找合適的幀并把他們加入到整個(gè)過(guò)程中,這樣就消除了冗余編碼并且提高了被編碼影像的質(zhì)量;g.帶寬仿真。RealProducerPlus捆綁了一個(gè)寬帶模擬器。這是一個(gè)Realplayer的插件,它允許創(chuàng)作人員在虛擬RealServer時(shí)可以測(cè)試真實(shí)世界的帶寬情況和信息損耗情況。h.RealMedia編輯器允許改變開(kāi)始和結(jié)束的時(shí)間,把文件粘貼到一起,觀(guān)察流屬性,預(yù)覽任何Real視音頻文件。(3)Microsoft公司的WindowsMedia技術(shù)Microsoft是三家之中最后進(jìn)入這個(gè)市場(chǎng)的,但利用其操作系統(tǒng)的便利很快便取得了一定的市場(chǎng)份額。WindowsMedia是Microsoft提出的流媒體傳播方案,其主要目的是在Internet和Intranet上實(shí)現(xiàn)音頻、視頻等多媒體流的傳輸。WindowsMedia技術(shù)是一個(gè)能適應(yīng)多種網(wǎng)絡(luò)帶寬條件的流式多媒體信息發(fā)布平臺(tái),提供密切結(jié)合的一系列服務(wù)和工具用以創(chuàng)造、管理、廣播和接收流媒體內(nèi)容,包括了流媒體的制作、發(fā)布、播放和管理的一整套解決方案。WindowsMedia的關(guān)鍵核心是MMS協(xié)議和ASF數(shù)據(jù)格式,MMS用于網(wǎng)絡(luò)傳輸控制,ASF則用于媒體內(nèi)容和編碼方案的打包。另外,WindowsMedia還提供了開(kāi)發(fā)工具包(SDK)供二次開(kāi)發(fā)使用。微軟的流視頻解決方案在微軟視窗平臺(tái)上是免費(fèi)的,制作端與播放器的視音頻質(zhì)量都上佳,而且易于使用,但目前在整體解決方案方面和RealNetworks的產(chǎn)品還有差距。WindowsMedia由MediaTools,MediaServer和MediaPlayer等工具構(gòu)成。MediaTools是整個(gè)方案的重要組成部分,它提供了一系列的工具幫助用戶(hù)生成ASF格式的多媒體流,分創(chuàng)建工具和編輯工具兩種,創(chuàng)建工具主要用于生成ASF格式的多媒體流,包括MediaEncoder,Author,VidToASF,WavTbASF,Presenter五個(gè)工具;編輯工具主要對(duì)ASF格式的多媒體流信息進(jìn)行編輯與管理,包括后期制作工具ASFIndexer與ASFChop,以及對(duì)ASF流進(jìn)行檢查并改正錯(cuò)誤的ASFCheckoMediaServer可以保證文件的保密性,不被下載,并使每個(gè)使用者都能以最佳的影片品質(zhì)瀏覽網(wǎng)頁(yè),具有多種文件發(fā)布形式和監(jiān)控管理功能。MediaPlayer則提供強(qiáng)大的流信息播放功能。WindowsMedia的核心是ASF(AdvancedSystemsFormat)。ASF是一個(gè)獨(dú)立于編碼方式的在網(wǎng)絡(luò)上實(shí)時(shí)傳播多媒體的技術(shù)標(biāo)準(zhǔn),Microsoft希望用ASF取代QuickTime之類(lèi)的技術(shù)標(biāo)準(zhǔn)以及WAV,AVI之類(lèi)的文件擴(kuò)展名,并打算用ASF作為將來(lái)的Windows版本中所有多媒體內(nèi)容的標(biāo)準(zhǔn)文件格式。ASF也是一種數(shù)據(jù)格式,音頻、視頻、圖像以及控制命令腳本等多媒體信息通過(guò)這種格式,以網(wǎng)絡(luò)數(shù)據(jù)包的形式傳輸,實(shí)現(xiàn)流式多媒體內(nèi)容發(fā)布。其中,在網(wǎng)絡(luò)上傳輸?shù)膬?nèi)容就稱(chēng)為ASF流(ASFStream)。ASF支持任意的壓縮、解壓縮編碼方式,并可以使用任何一種底層網(wǎng)絡(luò)傳輸協(xié)議,如RTP,RTSP,TCP,RTCP,UDP等,具有很大靈活性。Microsoft打算將ASF用作將來(lái)作為Windows版本中多媒體內(nèi)容的標(biāo)準(zhǔn)文件格式,這無(wú)疑將對(duì)Internet特別是流式技術(shù)的應(yīng)用和發(fā)展產(chǎn)生重大影響。嵌入式圖形用戶(hù)界面圖形用戶(hù)界面是指采用圖形顯示方式來(lái)完成用戶(hù)與機(jī)器的信息交換,借助計(jì)算機(jī)圖形學(xué)技術(shù)使人機(jī)交互能夠大量利用顏色、形狀等視覺(jué)信息,發(fā)揮人的形象感知和形象思維的潛能,提高了信息傳遞的效率。目前已出現(xiàn)了很多基于Linux的嵌入式系統(tǒng)。嵌入式系統(tǒng)對(duì)GUI有著特殊的要求:由于嵌入式系統(tǒng)實(shí)時(shí)性要求非常高,對(duì)GUI的要求也高。這些系統(tǒng)一般不希望建立在龐大臃腫的、非常消耗系統(tǒng)資源的操作系統(tǒng)和GUI之上,比如Windows或XWindow。因此,這些系統(tǒng)對(duì)輕型GUI的需求更加突出。另外,嵌入式系統(tǒng)往往是一種定制設(shè)備,它們對(duì)GUI的需求也必須是可定制的。所以,嵌入式系統(tǒng)對(duì)GUI的基本要求包括輕型、占用資源少、高性能、高可靠性和可配置。從用戶(hù)的觀(guān)點(diǎn)來(lái)看,圖形用戶(hù)界面(GUI)是系統(tǒng)的一個(gè)最至關(guān)重要的方面:用戶(hù)通過(guò)GUI與系統(tǒng)進(jìn)行交互,所以GUI應(yīng)該易于使用并且非??煽?。(1)幾種常見(jiàn)的GUI系統(tǒng)在嵌入式Linux下有很多圖形界面系統(tǒng)GUI,包括Qt/Embedded,MiniGUI,Microwindows和GTK+等。a.Qt/EmbeddedQt/Embedded是著名的Qt庫(kù)開(kāi)發(fā)商TrollTech發(fā)布的面向嵌入式系統(tǒng)的Qt版本。因?yàn)镼t是KDE等項(xiàng)目使用的GUI支持庫(kù),所以有許多基于Qt的XWindow程序可以非常方便地移植到Qt/Embedded版本上。不過(guò),Qt/Embedded存在一些問(wèn)題值得注意:首先,該系統(tǒng)采用兩種條款發(fā)布,如果要開(kāi)發(fā)商業(yè)程序,就必須向TrollTech交納授權(quán)費(fèi)用。其次,Qt/Embedded是一個(gè)C++函數(shù)庫(kù),當(dāng)Qt/Embedded裁剪到最小630kB,但這時(shí)的Qt/Embedded庫(kù)已經(jīng)基本上失去了使用價(jià)值,低的程序效率、大的資源消耗也對(duì)運(yùn)行Qt/Embedded的硬件提出了更高的要求。第三,Qt/Embedded庫(kù)目前主要針對(duì)手持式信息終端,因?yàn)閷?duì)硬件加速支持的匱乏,很難應(yīng)用到對(duì)圖形速度、功能和效率要求較高的嵌入式系統(tǒng)當(dāng)中,比如機(jī)頂盒、游戲終端等等。第四,Qt/Embedded的結(jié)構(gòu)過(guò)于復(fù)雜,很難進(jìn)行底層的擴(kuò)充、定制和移植。b.MiniGUIMiniGUI是由清華大學(xué)魏永明主持開(kāi)發(fā)的,并由許多自由軟件開(kāi)發(fā)人員支持的一個(gè)自由軟件項(xiàng)目,其目標(biāo)是為基于Linux的實(shí)時(shí)嵌入式系統(tǒng)提供一個(gè)輕量級(jí)的圖形用戶(hù)界面支持系統(tǒng)。MiniGUI體系結(jié)構(gòu)是分層設(shè)計(jì)的,在最底層,圖形抽象層(GAL)和輸入抽象層(IAL)提供底層圖形接口以及輸入接口,如鼠標(biāo)和鍵盤(pán)的驅(qū)動(dòng);中間層是MiniGUI的核心層,其中包括了窗口系統(tǒng)必不可少的各個(gè)模塊;最頂層的API是提供給用戶(hù)的編程接口。與MicroWindows、Qt/Embedded等GUI相比,MiniGUI最顯著特點(diǎn)是占用資源小和可移植性好。但是,MiniGUI還存在諸多不足。譬如,它還缺乏開(kāi)發(fā)應(yīng)用程序的集成開(kāi)發(fā)環(huán)境,以及一些必要的應(yīng)用程序,如瀏覽器等一些Internet工具。同時(shí),這些不足也在不同程度上阻礙著MiniGUI的推廣和應(yīng)用。c.MicroWindows/NanoXMicroWindows是一個(gè)開(kāi)放源碼的嵌入式GUI軟件,由CenturySoftware公司主持開(kāi)發(fā),目的是把圖形視窗環(huán)境引入到運(yùn)行Linux的小型設(shè)備和平臺(tái)上,它有許多針對(duì)現(xiàn)代圖形視窗環(huán)境的功能部件。MicroWindows體系結(jié)構(gòu)是基于客戶(hù)機(jī)/服務(wù)器的,并且具有分層設(shè)計(jì),在最底層,屏幕和輸入設(shè)備驅(qū)動(dòng)程序與實(shí)際硬件交互;在中間層,可移植的圖形引擎提供對(duì)線(xiàn)的繪制、區(qū)域的填充、多邊形的裁剪14以及顏色模型的支持;在最上層,實(shí)現(xiàn)了可以用來(lái)開(kāi)發(fā)圖形應(yīng)用程序的多種API函數(shù)。目前,MicroWindows支持兩種API函數(shù):MicroWindowsAPI和Nano-XAPI。MicroWindowsAPI適用于所有Win32和WinCE的應(yīng)用程序。Nano-X是MicroWindows支持的類(lèi)XAPI,沿用XWindows中的XlibAPI。與Xlib實(shí)現(xiàn)不同,Nano-X仍在每個(gè)客戶(hù)機(jī)上同步運(yùn)行,這意味著一旦發(fā)送了客戶(hù)機(jī)請(qǐng)求包,服務(wù)器在為另一個(gè)客戶(hù)機(jī)提供服務(wù)之前一直等待,直到整個(gè)包都到達(dá)為止。這使服務(wù)器代碼非常簡(jiǎn)單,而運(yùn)行的速度仍非???。但是,Nano-X聯(lián)網(wǎng)功能部件至今沒(méi)有經(jīng)過(guò)適當(dāng)?shù)卣{(diào)整(特別是網(wǎng)絡(luò)透明性),并且MicroWindows性能不高,特別在圖形引擎中有許多低效的算法,所以也還沒(méi)有太多現(xiàn)成的應(yīng)用程序可用。d.GTK+GTK+是建立在Xwindow和Glib庫(kù)上的輕量級(jí)高級(jí)圖形庫(kù),旨在為應(yīng)用程序提供一套與平臺(tái)無(wú)關(guān)的圖形用戶(hù)界面接口。Xwindow是一種圖形用戶(hù)界面系統(tǒng),它為應(yīng)用程序提供了豐富的作圖資源。它有經(jīng)過(guò)精簡(jiǎn)的Xlib類(lèi)庫(kù),去掉了許多對(duì)設(shè)備的檢測(cè)過(guò)程,占用資源少且穩(wěn)定性和移植性好。其主要功能特點(diǎn)有穩(wěn)定可靠、靈活、提供了事件驅(qū)動(dòng)和信號(hào)/回調(diào)函數(shù)的消息傳遞機(jī)制、支持多類(lèi)資源文件等優(yōu)點(diǎn)。GTK+與其依賴(lài)庫(kù)的關(guān)系如圖2.2所示。其中,Glib是Linux系統(tǒng)下最常用的輕量級(jí)的C語(yǔ)言函數(shù)庫(kù),它提供了C常用的數(shù)據(jù)結(jié)構(gòu)定義、處理函數(shù)、宏、可移植的封裝和一些運(yùn)行時(shí)機(jī)能,如事件循環(huán)、線(xiàn)程、動(dòng)態(tài)調(diào)用、對(duì)象系統(tǒng)等的API;Xlib是TinyX的底層函數(shù)庫(kù),是用來(lái)控制顯示的底層圖形庫(kù),它提供了豐富的作圖資源;Gdk是建立在Xlib上的針對(duì)圖形圖象類(lèi)的封裝,具有良好的移植性;GTK+即是建立在Xlib和GDK上的面向?qū)ο蟮母呒?jí)類(lèi)庫(kù)。應(yīng)用程序主要采用GTK+編寫(xiě),但是也可以直接調(diào)用GDK,Xlib和Glib的有關(guān)函數(shù)。GTK+系統(tǒng)使用事件驅(qū)動(dòng)和信號(hào)回調(diào)機(jī)制作為應(yīng)用程序的創(chuàng)建構(gòu)架。當(dāng)用戶(hù)對(duì)界面控件做出某種操作即會(huì)產(chǎn)生一個(gè)事件。此時(shí)程序會(huì)收到消息并通知該控件有事件發(fā)生,控件即會(huì)產(chǎn)生特定信號(hào)并根據(jù)此信號(hào)調(diào)用相應(yīng)回調(diào)函數(shù)執(zhí)行功能處理。GTK+程序控制權(quán)傳遞基于“事件”和“信號(hào)”機(jī)制。gtk_main()函數(shù)是GTK+主處理循環(huán),當(dāng)程序運(yùn)行到這里時(shí),GTK+進(jìn)入等待狀態(tài),直到界面控件對(duì)象發(fā)生了某種事件(如鼠標(biāo)點(diǎn)擊、鍵盤(pán)輸入、焦點(diǎn)轉(zhuǎn)移等),這些事件都由支持系統(tǒng)收集,將其以事先約定的格式翻譯為特定的消息并發(fā)送。GTK+主循環(huán)捕獲到事件后通知該控件并產(chǎn)生特定信號(hào),此時(shí)控制權(quán)就轉(zhuǎn)讓給了相應(yīng)的函數(shù)調(diào)用,由事先與該控件及信號(hào)建立關(guān)聯(lián)的所謂“回調(diào)函數(shù)”對(duì)其處理?;卣{(diào)函數(shù)即是用于實(shí)現(xiàn)功能處理的代碼。整個(gè)GTK+程序就一直處于“收到事件、發(fā)出信號(hào)、處理信號(hào)”的循環(huán)中,直到關(guān)閉的消息傳來(lái)退出循環(huán),結(jié)束程序。e.信號(hào)處理函數(shù)信號(hào)處理函數(shù)又叫回調(diào)函數(shù),它是GTK+程序的主體部分,應(yīng)用程序?qū)嶋H所做的工作大部分都發(fā)生在信號(hào)處理函數(shù)中,設(shè)計(jì)這些函數(shù)也是編程者的主要工作之一?;卣{(diào)函數(shù)的主要任務(wù)就是接收信號(hào)并實(shí)現(xiàn)功能,它具有以下形式:voidfunc(GtkWidget*widget,gpointercallback_data);其中,widget是指向發(fā)出信號(hào)的控件指針,callback_data是指向要傳遞給回調(diào)函數(shù)的用戶(hù)附加數(shù)據(jù)。由于回調(diào)函數(shù)是與控件以及事件信號(hào)一一對(duì)應(yīng)的,因此當(dāng)操作界面較為復(fù)雜控件信號(hào)較多時(shí),回調(diào)函數(shù)的個(gè)數(shù)也會(huì)有很多。特定控件發(fā)出了特定信號(hào)后應(yīng)用程序需要知道調(diào)用哪個(gè)回調(diào)函數(shù)來(lái)處理信號(hào),因此編程者必須創(chuàng)建這二者之間的關(guān)聯(lián)關(guān)系,GTK+系統(tǒng)稱(chēng)之為信號(hào)連接器。用以連接信號(hào)和回調(diào)函數(shù)的信號(hào)連接器創(chuàng)建函數(shù)如下:gintgtk_signal_connect(GtkObject*object,gchar*name,GtkSignalFuncfunc,19gpointerfunc_data);其中,object是發(fā)出的信號(hào)的控件指針;name是發(fā)出的信號(hào)名稱(chēng),為字符串形式,用雙引號(hào)引起來(lái);func是發(fā)出信號(hào)后要調(diào)用的函數(shù)名,即回調(diào)函數(shù)名,需要用G_CALLBACK宏來(lái)轉(zhuǎn)換;func_data是要傳遞給回調(diào)函數(shù)的用戶(hù)附加數(shù)據(jù),它的值類(lèi)型為gpointer,如果不是這一類(lèi)型需要強(qiáng)制轉(zhuǎn)換,如果沒(méi)有參數(shù)則為NULL。這里只能傳遞一個(gè)參數(shù),如果有多個(gè)參數(shù)可以先將它們定義為一個(gè)結(jié)構(gòu)體,再將此結(jié)構(gòu)體作為參數(shù)傳遞過(guò)去。這樣當(dāng)控件object發(fā)出了信號(hào)name后,程序即會(huì)調(diào)用回調(diào)函數(shù)func來(lái)處理信號(hào)。播放器的設(shè)計(jì)流程設(shè)計(jì)播放器的系統(tǒng)結(jié)構(gòu)由于嵌入式Linux媒體播放器的設(shè)計(jì)既要滿(mǎn)足對(duì)特殊嵌入式系統(tǒng)的要求,又要做到功能強(qiáng)大、界面友好、簡(jiǎn)單可用,經(jīng)過(guò)分析關(guān)鍵要做到以下幾點(diǎn):第一要支持Linux系統(tǒng);第二點(diǎn)是播放器的整體結(jié)構(gòu)基于分層設(shè)計(jì),使各個(gè)功能模塊層次結(jié)構(gòu)清晰,條理清楚;第三點(diǎn)是擴(kuò)展的解碼器接口,可以方便的添加對(duì)解碼格式和解碼協(xié)議的擴(kuò)展功能;第四點(diǎn)是播放器框架不基于某種特定的架構(gòu),以增強(qiáng)其移植性;最后是要具有友好的圖形用戶(hù)界面,操作簡(jiǎn)單方便。通過(guò)使用C語(yǔ)言開(kāi)發(fā)來(lái)支持嵌入式Linux系統(tǒng);采用GTK+作為GUI來(lái)提供強(qiáng)大的用戶(hù)界面;采用FFMpeg開(kāi)源解碼庫(kù)來(lái)完成解碼工作,它支持多種音頻和視頻編解碼標(biāo)準(zhǔn),功能十分強(qiáng)大,并且實(shí)現(xiàn)一個(gè)預(yù)先定義好的的解碼器接口來(lái)增強(qiáng)對(duì)多種格式媒體文件的解碼擴(kuò)展性;利用SDL來(lái)完成對(duì)音視頻的輸出,消除對(duì)架構(gòu)的依賴(lài),保證了良好的可移植性。圖形用戶(hù)界面模塊接收到用戶(hù)的播放指令之后,就調(diào)用輸入模塊的相應(yīng)函數(shù)從本地文件或者網(wǎng)絡(luò)流媒體文件取得已壓縮數(shù)據(jù),然后將它送到相應(yīng)的解碼器,解碼之后取得的未經(jīng)壓縮的數(shù)據(jù)再將其傳遞給實(shí)現(xiàn)回放操作的功能塊。另外再加上負(fù)責(zé)處理與用戶(hù)交互的圖形用戶(hù)界面,銜接各個(gè)部分良好工作的控制管理功能,所以經(jīng)過(guò)分析之后將播放器劃分為輸入、輸出、插件接口、解碼器四個(gè)模塊。從功能上,它們各自所執(zhí)行的功能是互相獨(dú)立的;從另一方面來(lái)看,他們又是相互緊密聯(lián)系的??梢詫⒁纛l視頻的解碼程序以插件的形式封裝在解碼器模塊中,對(duì)不同格式的媒體文件可以使用解碼器模塊中封裝的對(duì)應(yīng)的解碼器插件。同時(shí),為了調(diào)用的方便,可以在插件接口模塊和解碼器模塊之間采用一套統(tǒng)一的解碼器封裝接口。播放器主程序只需要調(diào)用接口函數(shù)就可以控制媒體數(shù)據(jù)的播放了,根本不需要了解媒體數(shù)據(jù)的格式及解碼算法,這使得播放器的主程序與解碼器模塊具有相對(duì)獨(dú)立性。當(dāng)需要增加一種新的媒體播放類(lèi)型時(shí),只需要按照封裝接口,編寫(xiě)要添加的解碼器插件即可,而不需要對(duì)播放器的主程序做任何改動(dòng),這就使得播放器的可擴(kuò)展性增強(qiáng)。只要在解碼器選擇方面,可以將解碼器種的所有解碼插件通過(guò)注冊(cè)函數(shù)注冊(cè)到插件接口模塊上,這樣,就可以根據(jù)輸入文件的擴(kuò)展名和文件的頭信息選擇合適的解碼器,之后實(shí)現(xiàn)媒體數(shù)據(jù)的播放。界面設(shè)計(jì)圖形用戶(hù)界面窗口以Qt/Embedded為基礎(chǔ)開(kāi)發(fā),通過(guò)調(diào)用Qt/Embedded提供的類(lèi)庫(kù)根據(jù)需要設(shè)計(jì)可以管理多媒體文件的基本窗口,包括打開(kāi)、刪除、顯示文件長(zhǎng)度、顯示播放時(shí)間等窗口,以及為方便用戶(hù)設(shè)定的管理播放列表、進(jìn)行播放控制的窗口,這些都是直接和用戶(hù)打交道的,由于采用Qt/Embedded最為廣泛使用的GUI,可移植性得到了保證。本程序的主界面分別是由用戶(hù)播放控制區(qū)域和視頻圖像顯示區(qū)域組成。包括的窗口部件包口:菜單欄、按鈕欄、進(jìn)度條、視頻播放界面、文件添加界面等。用戶(hù)播放控制區(qū)域主要包括播放控制按鈕和彈出菜單,是由GTK+來(lái)負(fù)責(zé)創(chuàng)建控件,設(shè)置控件屬性并顯示窗體,主要的功能包括打開(kāi)文件、打開(kāi)URL、播放、停止、暫停、播放位置導(dǎo)航、音量調(diào)節(jié)等。視頻圖像顯示區(qū)域通過(guò)SDL來(lái)完成圖像的顯示。在界面的布局上可以自行調(diào)整,也可以采用布局管理器方式,這里簡(jiǎn)單介紹一下布局管理器方式,它為窗口部件提供了有感知的默認(rèn)值,對(duì)子窗口部件的大小和位置做出適當(dāng)?shù)恼{(diào)整。所以布局管理器方式是對(duì)設(shè)計(jì)圖形化用戶(hù)界面、組織管理界面窗口部件是最好的方法。布局管理器方式主要有四種管理器:水平布局管理器(QHBoxLayout),按水平的方向組織管理窗口部件;垂直布局管理器(QVBoxLayout),按垂直方向管理窗口部件;網(wǎng)格布局管理器(QGridLayout),按二位網(wǎng)格方式組織管理窗口部件;站布局管理器(QStackedLayout),按照一種類(lèi)似于棧的方式組織管理窗口部件,在某一時(shí)刻只有一種窗口部件是可見(jiàn)的。在本程序中界面的設(shè)計(jì)采用了基本的水平布局管理器和垂直布局管理器。模塊設(shè)計(jì)輸入模塊輸入模塊主要是響應(yīng)用戶(hù)通過(guò)圖形界面發(fā)出的文件打開(kāi)命令,主要是對(duì)用戶(hù)指定的文件進(jìn)行讀取和解析,將獲得文件的長(zhǎng)度、播放時(shí)間、編碼格式等內(nèi)容,結(jié)合MIME的處理,顯示預(yù)先設(shè)計(jì)的窗口中。它將獲得待播放文件的文件路徑和文件名。在此之后,它將首先判斷文件的路徑是否合法,文件是否為空,如果文件路徑不合發(fā)或文件為空,輸入模塊將退出執(zhí)行,其他模塊和界面將沒(méi)有變化。如果文件路徑合法同時(shí)文件不為空,它將開(kāi)始對(duì)播放進(jìn)行初始化,初始化結(jié)束后它將向插件接口模塊發(fā)出信號(hào),通過(guò)其查找該文件的可用解碼器,為文件解碼做好準(zhǔn)備。輸出模塊輸出模塊主要功能是將通過(guò)解碼器解碼之后的音頻和視頻數(shù)據(jù)送到輸出設(shè)備輸出。根據(jù)輸出內(nèi)容的不同可劃分為音頻數(shù)據(jù)和視頻數(shù)據(jù)。這兩個(gè)部分基本上是相互獨(dú)立輸出的。之后他們分別調(diào)用音頻解碼器和視頻解碼器進(jìn)行解碼。通過(guò)插件接口模塊的同步控制讓它們?cè)谡f(shuō)輸出時(shí)保持同步。再分別通過(guò)音頻和視頻輸出設(shè)備輸出。視頻輸出的主要步驟:1.根據(jù)屏幕尺寸創(chuàng)建兩個(gè)對(duì)象,一個(gè)用于存放當(dāng)前幀,一個(gè)用于旋轉(zhuǎn)幀;2.檢查解碼以后的視頻數(shù)據(jù)是否已經(jīng)準(zhǔn)備就緒;3.判斷當(dāng)前幀是否可見(jiàn),若不可見(jiàn)直接等待可輸出的下一幀;4.獲取視頻畫(huà)面的長(zhǎng)和寬,以便來(lái)設(shè)置輸出還的長(zhǎng)寬比,如果文件畫(huà)面尺寸比軟件的畫(huà)面大,程序會(huì)自動(dòng)適應(yīng)文件的畫(huà)面尺寸,當(dāng)用戶(hù)選擇全屏播放時(shí),會(huì)按照比例把畫(huà)面擴(kuò)大至全屏,當(dāng)然用戶(hù)也可以用拖拽來(lái)自定義播放畫(huà)面的大小。5.把等待輸出的區(qū)域上空清空,并且為創(chuàng)建的對(duì)象分配區(qū)域。6.將準(zhǔn)備好的幀發(fā)送到步驟5分配好的區(qū)域,以便輸出到顯示設(shè)備上。插件接口模塊插件接口模塊通過(guò)輸出文件的擴(kuò)展名和文件的頭部信息來(lái)判斷該輸入文件是否被播放器所支持;對(duì)解碼模塊種的所有解碼器進(jìn)行注冊(cè);能夠獲取播放文件的信息。能夠停止播放文件,并做出相應(yīng)的處理;能夠調(diào)用解碼器對(duì)音頻采樣數(shù)據(jù)進(jìn)行讀取,能夠調(diào)用解碼器對(duì)視頻幀進(jìn)行讀取等。插件接口調(diào)用主要是把所有對(duì)解碼器的操作整合到一個(gè)統(tǒng)一的開(kāi)放式接口當(dāng)中,根據(jù)上一部分解析出的文件信息區(qū)查找相應(yīng)的解碼器插件并調(diào)用,如果沒(méi)有找到可用的解碼器可以返回信息提醒用戶(hù)添加相應(yīng)的插件。通過(guò)實(shí)現(xiàn)這樣的接口可以使播放器的擴(kuò)展性大大提高,因此本部分是播放器的核心。由此該模塊實(shí)現(xiàn)了兩種接口函數(shù),一種是用于處理網(wǎng)絡(luò)流媒體數(shù)據(jù)的網(wǎng)絡(luò)傳輸協(xié)議接口,另一種是負(fù)責(zé)處理本地媒體文件的接口。本地文件接口主要負(fù)責(zé)從存放在本地文件系統(tǒng)中的媒體文件中讀取媒體數(shù)據(jù),經(jīng)過(guò)對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的分析之后,再交由音視頻解碼模塊進(jìn)一步的處理;網(wǎng)絡(luò)流媒體傳輸接口則負(fù)責(zé)實(shí)現(xiàn)網(wǎng)絡(luò)流協(xié)議的客戶(hù)端協(xié)議部分,將待實(shí)現(xiàn)的網(wǎng)絡(luò)傳輸協(xié)議按照統(tǒng)一的接口進(jìn)行封裝就可以擴(kuò)展其處理更多種協(xié)議的功能,所以具有一定的擴(kuò)展性。另外需要一個(gè)系統(tǒng)主控模塊,主要功能是過(guò)圖形用戶(hù)界面模塊為用戶(hù)提供一個(gè)播放器的控制接口,另一方面負(fù)責(zé)協(xié)調(diào)管理圖形用戶(hù)界面、音視頻解碼、數(shù)據(jù)訪(fǎng)問(wèn)這三大模塊良好的協(xié)同工作。播放器在播放過(guò)程種會(huì)涉及到幾種播放狀態(tài)的轉(zhuǎn)換,包括播放、暫停、停止,在播放流媒體數(shù)據(jù)時(shí)還會(huì)涉及到超時(shí)的狀態(tài),通過(guò)系統(tǒng)管理主控模塊對(duì)其它幾個(gè)模塊的協(xié)調(diào)調(diào)度,實(shí)現(xiàn)播放狀態(tài)的轉(zhuǎn)換。解碼庫(kù)模塊解碼庫(kù)模塊的主要作用是對(duì)音頻和視頻的已壓縮數(shù)據(jù)進(jìn)行解碼。解碼庫(kù)又含解碼器和分離器,用于對(duì)各種多媒體文件進(jìn)行解碼。。解碼器就是對(duì)音頻視頻數(shù)據(jù)流進(jìn)行解碼的組件,分離器就是把文件流中的數(shù)據(jù)分離為音頻視頻數(shù)據(jù)流的組件,音頻數(shù)據(jù)和視頻數(shù)據(jù)是分開(kāi)解碼的,二者缺一不可。該模塊采用統(tǒng)一的接口將所有解碼器的程序進(jìn)行封裝,也采用動(dòng)態(tài)加載的方式實(shí)現(xiàn)各自數(shù)據(jù)的解碼。播放器功能的實(shí)現(xiàn)界面的詳細(xì)開(kāi)發(fā)過(guò)程:通過(guò)定義QLable的對(duì)象制作播放窗口;定義QListWidget的對(duì)象控件制作播放列表;定義QPushButton的對(duì)象制作按鈕;定義QSlider的對(duì)象制作聲音控制條和播放進(jìn)度控制條。設(shè)置界面大小#include<QtGui>#include<QtWidgets/QtWidgets>#include"movieForm.h"intmain(intargc,char**argv){QApplicationapp(argc,argv);QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));MovieForm*movieForm=newMovieForm;movieForm->show();returnapp.exec();}resize(720,480);//界面大小setWindowTitle("Mplayer");//設(shè)置窗口標(biāo)題為Mplayerview=newQLabel("",this);view->setGeometry(QRect(30,30,480,335));timeLabel=newQLabel(this);timeLabel->setGeometry(QRect(30,370,200,20));//添加文件欄percentLabel=newQLabel(this);percentLabel->setGeometry(QRect(180,370,50,20));//控制欄聲明槽函數(shù)voidnext();voidpre();voidpause();voidstop();voidchangeVolume(int);voidsetSpeed();voiddataRecieve();voidcurrent(int);voidjumpByTime();voidsureBtnClicked();voidplayListItem(QListWidgetItem*);voidadd();voiddel();聲明及添加按鈕:QPushButton*p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論