Mplayer移植(目标板mini2440)
到官网下载最新版本源码MPlayer-1.1.1.tar.xz(http://www.mplayerhq.hu/MPlayer/releases/)skin代码库Abyss-1.7.tar.bz2(http://www.mplayerhq.hu/MPlayer/skins/)
解码库all-20110131.tar.bz2(http://www.mplayerhq.hu/MPlayer/releases/codecs/)
mkdir /usr/lib/codecs
tar jxvf all-20110131.tar.bz2
mv all-20110131/* /usr/lib/codecs
安装mplayer
tar jxvf MPlayer-1.1.1.tar.xz
cd MPlayer-1.1.1
解压xz文件时发现没有安装相应的包,下载xz-4.999.9beta.tar.bz2
(http://tukaani.org/xz/xz-4.999.9beta.tar.bz2)安装
xz –d MPlayer-1.1.1.tar.xz
再用普通的命令解压即可
tar xvf MPlayer-1.1.1.tar
配置Makefile相关命令(注:编译时的配置参数忘了以下是另外的作为记录,可以用命令./configure –help来查看相关参数)
./configure --prefix=/tmp/mplayer --cc=arm-linux-gcc --target=arm-linux --with-codecsdir=/usr/local/lib/codecs --enable-static--disable-win32dll --disable-dvdread --disable-dvdread-internal --disable-dvdnav--disable-libdvdcss-internal --disable-mencoder --disable-mp3lib --disable-armv5te--disable-armv6 --enable-fbdev --enable-mad --enable-libavcodec_mpegaudio_hp --disable-iconv--enable-linux-devfs --disable-ivtv --language=zh_CN --enable-cross-compile --enable-real--enable-ossaudio --host-cc=gcc --disable-live 2>&1|tee logfile
参数解释:
--prefix mplayer安装路径,make install 后就可以在本目录下找到可执行程序mplayer
--cc 交叉编译工具,如果没添加到环境变量,就要指定完整路径
--enable-static 设定静态连接
--disable-win32dll 禁用win32动态链接库支持。在pre版本中该参数为
--disable-dvdread 禁用libdvdread.
--enable-fbdev 支持fbdev,这个一定要选上。
--disable-mp3lib和 --enable-mad
arm系列的cpu,一般都没浮点运算单元,而mplayer的mp3解码默认使用mp3lib,这个是浮点运算库,在arm上肯定跑不了,使用ffmp3或者libmad(需要外部库libmad支持)应该就没问题了。所以这里需要禁止掉mencoder和使能libmad。
--disable-mencoder 禁止编码功能
--disable-live 禁止live 555流媒体。
--enable-libavcodec_a 启用静态的libavcodec解码。在pre版本中该参数为--enable-libavcodec。
--disable-armv5te--disable-armv6 禁用armv5te、armv6指令扩展。
--with-extraincdir和-with-extralibdir 指定libmad和mad.h的路径
配置时出现错误:
Unknown parameter:--with-codecsdir=/usr/local/lib/codecs/
查看帮助 ./configure –help
--with-codecsdir这个命令改为了--codecsdir=/usr/local/lib/codecs/
再次尝试出现如下错误:
Error: yasm not found, use --yasm='' if youreally want to compile without
下载安装yasm 并加上配置参数--yasm=/usr/local/bin/yasm/bin
配置完后make编译遇到以下错误
implicit declaration of function'deflateBound'
原因是zlib低版本的原因下载新版的zlib-1.2.8.tar.gz安装
再次遇到问题,出现不支持pld [r1]指令的问题
在MPlayer-1.1.1/libmpeg2/motion_comp_arm_s.S文件的开始处写入
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
(这段代码意思是定义一个空的ARM汇编宏 pld,这样当代码出现pld指令,就变成一条空指令)
或把文件里面的指令pld [r1]全部替换成空格
然后
make
make install
在目录下可以找到生成的mplayer
Mplayer工作于slave模式的相关控制命令
在Mplayer源码中的slave.txt中有控制命令的详解,这里主要记录播放器所用到的几个简单命令
用linux C编写的进程可以通过命名管道来与Mplayer进行通讯
#define FIFO_NAME “/tmp/my_fifo”
mkfifo(FIFO_NAME,0777);
pipe_fd =open(FIFO_NAME, O_RDWR); //这里打开如果以写方式打开线程会阻塞在这里,同时打开读和写就不会阻塞
execlp("/mp3/mplayer","","-ac","mad","-slave","-quiet","-input","file=/tmp/my_fifo",my_song,NULL);//以slave模式打开mplayer
write(pipe_fd,"pause\n",strlen("pause\n"));//暂停或取消暂停命令kill(pid,SIGCONT); kill(pid,SIGSTOP);
write(pipe_fd,"quit\n",strlen("quit\n")) ; //退出命令
在暂停和取消暂停中要用到两个相关信号,SIGCONT和SIGSTOP
SIGCONT控制进程继续运行
SIGSTOP 控制进程暂停运行