mplayer安裝和移植
X86的LINUX上已經自帶了解碼庫,不需要另外安裝解碼庫,而arm平臺自己做的檔案系統沒有解碼庫,需要另外安裝解碼庫。
下載:
MPlayer: MPlayer-1.0rc2.tar.bz2
解碼庫: libmad-0.15.0b.tar.gz
一、在X86的LINUX上安裝mplayer
1、把MPlayer-1.0rc2.tar.bz2放LINUX純目錄下解壓,並進到該目錄下。
#tar jxvf MPlayer-1.0rc2.tar.bz2
#cd MPlayer-1.0rc2
2、配置
#./configure --enable-mencoder (--disable-ivtv)
3、#make
注:安裝 mplayer1-0rc2 ./configure通過了, 但make出現問題:
vo_ivtv.c:79: error: storage size of 'sd' isn't known
vo_ivtv.c:80: error: storage size of 'sd1' isn't known
vo_ivtv.c:84: error: 'IVTV_STOP_FL_HIDE_FRAME' undeclared (first use in this function)
vo_ivtv.c:84: error: (Each undeclared identifier is reported only once
vo_ivtv.c:84: error: for each function it appears in.)
vo_ivtv.c:87: error: 'IVTV_IOC_STOP_DECODE' undeclared (first use in this function)
vo_ivtv.c:97: error: 'IVTV_IOC_START_DECODE' undeclared (first use in this function)
vo_ivtv.c:80: warning: unused variable 'sd1'
vo_ivtv.c:79: warning: unused variable 'sd'
make[1]: *** [vo_ivtv.o] Error 1
make[1]: Leaving directory `/root/mplay/MPlayer-1.0rc2/libvo'
make: *** [libvo/libvo.a] 錯誤 2
解決方法:在./configure 的時候加個選項(--disable-ivtv)
4、#make install
安裝完後,此時在MPlayer-1.0rc2目錄下會生成可執行檔案mplayer mencoder.其中mencoder是錄屏時用到
把它們拷貝到/bin/目錄下。要執行時:
#/bin/mpalyer /路徑/要播放的媒體檔名;
#/bin/mplayer a.mp3
二、移植mplayer到arm平臺的LINUX上(使用4.3.2編譯器)
在之前的部落格已經提到如何在linux安裝了交叉編譯器,安裝目錄是在/usr/local/arm/4.3.2/。
1、配置安裝libmad (如果不先配置安裝libmad,則在make mplayer時出現找不到mad.h 錯誤)
(1)#./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/4.3.2/lib CC=arm-linux-gcc
(2)#make
因為我使用的是高版本的 arm-linux-gcc-4.3.2 編譯器, make 時出現了“ cc1: error: unrecognized command line option "-fforce-mem" ”錯誤,這是因為這個高版本的 gcc 沒有 "-fforce-mem" 引數,解決的 辦法是在 Makefile 裡面查詢 "-fforce-mem" ,將其刪除即可 make 通過。
(3)#sudo make install
此時會在/usr/local/arm/4.3.2/lib/目錄下生成include目錄和lib目錄。
其中liclude目錄下有檔案 mad.h
lib 目錄有檔案 libmad.a libmad.la
2、配置安裝mplayer
(1)#./configure --enable-mencoder --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --enable-static --enable-ossaudio --prefix=/tmp/mplayer-rc2 --disable-win32dll --disable-dvdread --enable-fbdev --enable-mencoder --disable-live --disable-mp3lib --enable-mad --enable-libavcodec_a --disable-armv5te --disable-armv6 --with-extraincdir=/usr/local/arm/4.3.2/lib/include --with-extralibdir=/usr/local/arm/4.3.2/lib/lib
引數解析:
--host-cc=gcc # C compiler for tools needed while building [gcc]
--cc=arm-linux-gcc #C compiler to build MPlayer [gcc]
--target=arm-linux #target platform (i386-linux, arm-linux, etc)
--enable-static #build a statically linked binary
--enable-ossaudio #enable OSS audio output [autodetect]
--prefix=/tmp/mplayer-rc2 #prefix directory for installation [/usr/local]
--disable-win32dll # disable Win32 DLL support [enabled]
--disable-dvdread #disable libdvdread [autodetect]
--enable-fbdev #enable FBDev video output [autodetect]
--disable-mencoder #disable MEncoder (A/V encoder) compilation [enable] 不使能編碼器編輯
--disable-live #disable LIVE555 Streaming Media [autodetect] 讓Mpalyer不支援流媒體協議
--disable-mp3lib # disable builtin mp3lib [enabled]
--enable-mad #disable libmad (MPEG audio) support [autodetect]
--enable-libavcodec_a #disable static libavcodec [autodetect]
--disable-armv5te #disable DSP extensions (ARM) [autodetect]
--disable-armv6 #disable ARMv6 (ARM) [autodetect]
--with-extraincdir=/usr/local/arm/4.3.2/lib/include #指明mad.h檔案所在路徑
--with-extralibdir=/usr/local/arm/4.3.2/lib/lib #指明limad相關連結庫所在路徑
(2)#make
其中會出現很多下面錯誤:
armv4l/dsputil_arm_s.S:79:Error:....‘pld[r1]’
錯誤原因是pld指令只是在armv5te以上版本有效,在(armv41)無效。
修改/MPlayer-1.0rc2/libavcodec/armv4l/dsputil_arm_s.S檔案和
/mplayer/MPlayer-1.0rc2/libmpeg2/motion_comp_arm_s.S 檔案,在前面新增上:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
(3)#make install(出現提示不認識的檔案。因為是ARM平臺執行的檔案,所以不認識)
install -m 755 -s mplayer /tmp/mplayer-rc2/bin
strip: Unable to recognise the format of the input file `/tmp/mplayer-rc2/bin/mplayer'
安裝完後,此時在MPlayer-1.0rc2目錄下會生成可執行檔案mplayer mencoder。
把它們拷貝到平臺的/bin/目錄下。要執行時:
#/bin/mplayer -ac mad a.mp3
三、MPlayer slave命令
在命令中新增 -slave 和 -quiet就可以通過命令設定Mplayer實現相應的功能。在mplayer原始碼中的,
/DOCS/tech/slave.txt中對這些命令有詳細的解析。