【正文】
在這種方式下,要添加一個(gè)或一系列新的解碼器是非常容易的事,只需要將解碼器的解碼接口函數(shù)加入一個(gè)新的 AVCodec 結(jié)構(gòu)之中并將這個(gè)結(jié)構(gòu)添加在鏈表之中,這樣就可以用同樣的方法使用新加入的解碼器了。以視頻 ffmpeg解碼器為例,這個(gè)解碼器本身支持多種解碼格式。圖 15 播放器的目錄文件組織結(jié)構(gòu)31 / 40 播放器對(duì)解碼器和輸出設(shè)備的管理方式媒體文件格式的多樣性決定了媒體播放器要處理各種類型的音視頻數(shù)據(jù),媒體播放器高效的全局變量調(diào)用關(guān)系,使其能夠?yàn)樘囟ǖ囊粢曨l數(shù)據(jù)快速準(zhǔn)確的找到相應(yīng)的解碼器,為不同的輸出設(shè)備安裝相應(yīng)的設(shè)備驅(qū)動(dòng)。一視頻輸出為例,視頻輸出庫(kù)libvo中的文件 首先判斷輸出設(shè)備類型,繼而調(diào)用相應(yīng)的設(shè)備驅(qū)動(dòng)。若要對(duì)視頻進(jìn)行控制,如亮度設(shè)置,對(duì)比度設(shè)置、圖像翻轉(zhuǎn)、放大縮小等,還要從 文件中選擇相應(yīng)濾波器對(duì)視頻進(jìn)行濾波處理。下一步調(diào)用視頻編碼庫(kù)libvcodec中的 文件,從中選擇對(duì)應(yīng)的解碼器。Libmpdemux libmpcodecs libaf libmpcodecsdisplayaudiolibvolibao2分流 輸出解碼過濾表二 MPLAYER 文件30 / 40(2) 解碼解碼分為視頻解碼和音頻解碼。下一步調(diào)用 文件,判斷媒體類型繼而調(diào)用對(duì)應(yīng)的分流器文件對(duì)媒體數(shù)據(jù)進(jìn)行音視頻的分流。首先調(diào)用 文件,判斷數(shù)據(jù)流類型,播放器一共定義六種文件流類型,因而存在六種文件,分別是 。目錄名 目錄功能libmpdemux 媒體數(shù)據(jù)分析分流庫(kù)libmpcodecs 媒體編解碼庫(kù)libao2 音頻輸出庫(kù)libvo 視頻輸出庫(kù)input 外設(shè)輸入osdep 與 OS 相關(guān)的文件libaf 音頻過濾器庫(kù)文件名 文件功能 播放器出錯(cuò)信息處理功能實(shí)現(xiàn) 播放列表功能實(shí)現(xiàn) CPU 類型定義 檢測(cè) CPU 類型 主程序播放器開始運(yùn)行后,主程序文件 負(fù)責(zé)分流,解碼和輸出三個(gè)模塊的文件調(diào)度,如圖 15 所示。這一層由輸出模塊選擇最合適的設(shè)備驅(qū)動(dòng),根據(jù)時(shí)間戳確定的同步機(jī)制進(jìn)行音視頻的播放以達(dá)到同步的目的。初始化對(duì)應(yīng)的音視頻的解碼器以便將數(shù)據(jù)進(jìn)行解碼,并將解碼出的信息輸出,傳遞給下一級(jí)的輸出層。(3) 解碼層(decoder layer)該層不但包含音視頻的解碼模塊,也包含了音視頻解碼器的選擇模塊。分離器同時(shí)將提取時(shí)間戳,隨音視頻數(shù)據(jù)一同傳輸。(2) 分流層(demuxer layer): 即圖中的分流部分,其主要功能模塊為分流器,它的功能是依靠數(shù)據(jù)頭來判斷音視頻在這段文件數(shù)據(jù)中的各自位置,繼而對(duì)音視頻數(shù)據(jù)進(jìn)行分離。最后,將處理后的音視頻分別送到各自的輸出設(shè)備上進(jìn)行播出。下一步讀取緩沖區(qū)中音視頻各自的頭信息,初始化解碼器,開始進(jìn)行解碼。然后讀入媒體數(shù)據(jù)文件,并對(duì)文件格式進(jìn)行解析。其工作流程如圖 14。應(yīng)該是/mnt/mplayer/bin 目錄下的 mplayer 格式不正確。 移植 Mplayer 到開發(fā)板測(cè)試在配置 mplayer 有prefix=/tmp/mplayer 這樣一句話,進(jìn)入/tmp/mplayer/bin/找到生成文件 mplayer,將其拷貝到根目錄下,用 usb 轉(zhuǎn)串口線和網(wǎng)線把開發(fā)板和電腦連接起來,進(jìn)入 mini,使用 mount –o soft,timeo=100,rsize=1024 :/ /mnt命令把開發(fā)板根目錄掛載到電腦上,使用./mnt/mplayer /mnt/ 命令播放視頻文件,出現(xiàn)如圖 12 所示的錯(cuò)誤。 // 長(zhǎng)文件名TCHAR cAlternateFileName[ 14 ]。 // 系統(tǒng)保留DWORD dwReserved1。 // 文件長(zhǎng)度高 32 位DWORD nFileSizeLow。 // 文件最后一次訪問時(shí)間FILETIME ftLastWriteTime。 //文件屬性FILETIME ftCreationTime。我采用的是第二種方法。? 再合并回來到 里面即可。 /opt/host/armv4l/armv4lunknownlinux/lib/()(.data+0x8c): undefined reference to `_nss_files_endetherent39。 /opt/host/armv4l/armv4lunknownlinux/lib/()(.data+0x74): undefined reference to `_nss_files_setaliasent39。/opt/host/armv4l/armv4lunknownlinux/lib/()(.data+0x64): undefined reference to `_nss_files_getaliasent_r39。 undeclared here (not in a function) make[1]: *** [] Error 1 make[1]: Leaving directory `/home/xie/39。armv4l/:74: Error: no such instruction: `ldr r2,[lr, 在報(bào)錯(cuò)文件 :ifndef HAVE_PLD.macro pld reg.endmendif(這段代碼意思是定義一個(gè)空的 ARM 匯編宏 pld,這樣當(dāng)代碼出現(xiàn) pld 指令,就變成一條空指令)(3)PATH_MAX 沒有定義In file included from :60: :51: error: 39。armv4l/:72: Error: junk at end of line, first unrecognized character is `39。armv4l/:69: Error: no such instruction: `ldrsh r1,[lr,39。 got nothingarmv4l/:66: Error: too many memory references for `add39。 in operand 2armv4l/:65: Error: expecting operand after 39。 token/usr/local/arm/:262: parse error before __u32需要修改一下/usr/local/arm/,在 __BEGIN_DECLS 后面增加下述文字undef ntohl undef ntohs undef htonl24 / 40 undef htons(2)ARM 匯編宏 pld 的問題armv4l/:64: Error: invalid character 39。 token/usr/local/arm/:260: parse error before __u16/usr/local/arm/:262: parse error before 39。 token/usr/local/arm/:259: parse error before __u32/usr/local/arm/:260: parse error before 39。 安裝過程中遇到的問題及解決方法(1)使用 armlinuxgcc 編譯 mplayer 可能會(huì)出現(xiàn) 頭文件錯(cuò)誤如下:/usr/local/arm/:259: parse error before 39。enablestatic:是設(shè)定靜態(tài)連接,此時(shí)不需要關(guān)心動(dòng)態(tài)鏈接庫(kù)的問題。 交叉編譯 Mplayer 安裝步驟我用的版本是 可以在 Mplayer 的官方網(wǎng)站上下載。它們中絕大多數(shù)支持軟件或硬件縮放,所以你可以享受全屏電影。Mplayer 的另一大特點(diǎn)是能廣泛地支持各種音視頻輸出驅(qū)動(dòng)。Mplaver 本身自帶了多種類型的解碼器,包括xvid、ae3filter、ffdshow 、 09vobsub 等等看 DVDrip 必備的解碼器,因此它能支持大多數(shù)的媒體格式如:MPEG/VOB、 ASF/WMA/WMV、AVI 、OGM、RM、QT/MOVPMKV、VIVO、FILMFLI、NuppelVidco、 mPeg 和 RoQ 文件,還能觀看VCD、 SvCo、3ivx、DVD 、DivX3/4/5 甚至 WMV 電影。MPlayer 不僅在拖動(dòng)播放進(jìn)度時(shí)快得不可思議,而且在播放有些破損的文件時(shí)效果也好得出奇,在低主頻處理器的機(jī)器上 MPlayer 更是占盡優(yōu)勢(shì)。因此,他也被移植到了 Windows 操作系統(tǒng)下,使其應(yīng)用變得更加廣泛。5 移植 mplayer21 / 40MPlayer 是一個(gè)開源的軟件,我們可以從他的官網(wǎng)得到他的全部源碼。 to decline this license offer. v. Do you accept the terms of the license? ⑩ 輸入: yes 回車 i. Choose a feature configuration: 2. Minimal (630 kB) 20 / 403. Small (960 kB) 4. Medium ( MB) 5. Large (3 MB) 6. Everything (5 MB) 7. Your own local configuration (src/tools/) i. Sizes are stripped dynamic 80386 bu ild. Static builds are smaller. ii. Your choice (default 5): ? 輸入: 5 回車 i. Building on: linuxx86g++shared ii. Building for: linuxarmg++shared iii. Thread support..................... no iv. GIF support.......................... no v. MNG support........................no vi. JPEG support....................... no vii. Creating makefiles... viii. Qt is now configured for building. Just run make. ix. To reconfigure, run make clean and configure. x. 當(dāng)生成 Makefile 之后,就可以在上面同一個(gè)終端窗口下輸入 make 對(duì)QTExi. 源碼進(jìn)行編譯了。 to accept this license offer. iv. Type 39。 to view the GNU General Public License. iii. Type 39。 嵌入式圖形開發(fā)環(huán)境 QTE 的搭建① cd /home/tmake/tmake ② export TMAKEDIR=$PWD ③ export TMAKEPATH=$TMAKEDIR/lib/qws/linuxarmg++ ④ cd /home/qte/ ⑤ export QTDIR=$PWD ⑥ export QTEDIR=$QTDIR ⑦ export LD_LIBRARY_PATH=$QTDIR/lib:$QTEDIR/lib:$ LD_LIBRARY_PATH⑧ make clean ⑨ ./configure xplatform linuxarmg++ shared qvfb depths 4,8,16,32 i. 在 configure 過程中,會(huì)出現(xiàn)如下打印的信息,進(jìn)行如下對(duì)話選擇:ii. Type 39。 QtE 開發(fā)采用交叉編譯的方式,在宿主機(jī)開發(fā)時(shí)通過 qvfb(virtual framebuffer)來模擬 framebuffer。QtE 雖開源,但商業(yè)應(yīng)用需付 license 費(fèi)用。 QTE 簡(jiǎn)介Qte 即 Qt/embedded 它是 Qt 的一個(gè)版本,是一個(gè)專門為嵌入式系統(tǒng)設(shè)計(jì)圖形用戶界面的工具包,是挪威 Trolltech 公司的 Qt 的嵌入式版本。甚至還包括正則表達(dá)式的處理功能。Qt 提供了一種稱為 signals/slots 的安全類型來替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單?;旧?,Qt 同 X Window 上的 Motif,Openwin ,GTK 等圖形界 面庫(kù)和 Windows 平臺(tái)上的 MFC,OWL,VCL,ATL 是同類型的東西,有著以下優(yōu)點(diǎn)? 優(yōu)良的跨平臺(tái)特性:? Qt 支持下列操作系統(tǒng): Microsoft Windows 95/98,Microsoft Windows NT,Linux,Solaris,SunOS,HPUX,Digital UNIX (OSF/1 ,Tru64),Irix,F(xiàn)reeBSD ,BSD/OS, SCO,AIX,OS390,QNX 等等。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。輸入下列 2 條命令 ① cd /2410RP_linux/root ② ./mkcramfs rootfs 就會(huì)在 root 目錄下生成一個(gè)名字叫做 的文件系統(tǒng)。制作它的工具叫做 mkcramfs 。 ? /boot 目錄下是內(nèi)核映像