Mplayer是一款开源的多媒体播放器,自带多种解码库,支持播放多种格式的音视频,但移植它没那么简单。分享一下我的移植心得。
1.
安装libmad
Mplayer虽然自带音频解码库,但那是运行在浮点运算的前提下的,arm架构的cpu不支持浮点运算,libmad是一个开源高精度音频解码哭呀,完全是定点计算
进入libmad官网
http://www.underbit.com/
或点此下载
ftp://ftp.mars.org/pub/mpeg/
https://sourceforge.net/projects/mad/files/libmad/
下载 libmad-0.15.1b.tar.gz
1.tar zxvf libmad-0.15.1b.tar.gz
2.cd libmad-0.15.1b
3../configure –enable-fpm=arm –host=arm-linux –disable-shared –disable-debugging –prefix=/usr/local/libmad CC=/opt/crosstool/4.6.3/bin/arm-sice-linux-gnueabi-gcc
4.make
5.make install
make出错
error: unrecognized command line option “-fforce-mem”
修改Makefile
在Makefile中找到包含”-fforce-mem”字符串,将其删除即可;原因:gcc3.4或更高版本中,已将将该选项去除了。
再make make install
生成的库和头文件待会编译Mplayer要用到
2.编译安装Mplayer
下载MPlayer-1.0rc2.tar.bz2
官网http://www.mplayerhq.hu/design7/dload.html
或http://www.mplayerhq.hu/MPlayer/releases/ 下载
1.tar jxvf MPlayer-1.0rc2.tar.bz2
2.cd MPlayer-1.0rc2
3.根据需求配置Mplayer,我这里写了个配置脚本
./mkplayer.sh
#!/bin/sh
./configure \
--cc=/opt/crosstool/4.6.3/bin/arm-sice-linux-gnueabi-gcc \ #指定自己的交叉编译器
--host-cc=gcc \
--target=arm-linux \
--enable-static \ #静态编译
--prefix=/usr/local/Mplayer \ #安装路径
--disable-win32dll \ #禁用win32动态链接库支持
--disable-dvdread \ #禁用DVD
--enable-fbdev \ #启用开发板的帧缓冲设备
--disable-png \ #某部分人不加make时会报错
--disable-mencoder \ #不用mencoder转码
--disable-live \ #禁用流媒体
--disable-mp3lib \ #禁用自带的mp3lib音频解码库
--disable-ivtv \ #禁用ivtv文件
--enable-mad \ #使用刚编译的mad库
--enable-libavcodec_a \ #启用静态的libavcodec解码
--language=zh_CN \ #中文
--disable-armv5te \ #禁用armv5te、armv6指令扩展
--disable-armv6 \
--with-extraincdir=/usr/local/libmad/include \ #添加刚编译的mad库头文件位置
--with-extralibdir=/usr/local/libmad/lib \ #添加刚编译的mad库库文件位置
--enable-ossaudio #使能ossaudio
4.make -j4 (电脑多少核就用几个线程)
出现的错误
1.
error: ‘Z_NO_COMPRESSION’ undeclared here (not in a function)
解决办法:
配置添加–disable-png选项再make
2.
解决:
3.
Error: selected processor does not support ARM mode `pld [r1]
解决:参考 http://blog.csdn.net/xiaoaid01/article/details/19539391
预读取PLD指令
功能:cache预读取(PLD,PreLoad),使用PLD指示存储系统从后面几条指令所指定的存储器地址读取,存储系统可使用这种方法加速以后的存储器访问。
解决方法:修改MPlayer-1.0rc2/libmpeg2/motion_comp_arm_s.S和MPlayer-1.0rc2 /libavcodec/armv4l/dsputil_arm_s.S这两个报错文件,在前面添加上:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
然后再make
5.make install
好不容易编译完,但安装依然出错
1.
install: strip process terminated abnormally
make: * [install-mplayer] 错误 1
参考:http://blog.sina.com.cn/s/blog_662254530100z81x.html
install带-s 参数时会自动调用strip来strip应用程序。但是arm编译时要调用arm-linux-strip才有正确处理。
解决办法是取消-s参数
将config.mak中 INSTALLSTRIP=-s,-s去掉即可,重新make,make install
最终在目标文件生成mplayer可执行文件
把它下载到开发板测试
./mplayer -fs -zoom -x 800 -y 480 *.mp4 (或别的格式音视频文件)
-fs 视频图像居中
-zoom -x 800 -y 480 设置大小(具体按自己的开发板LCD分辨率设置)
插上耳机就能享受音视频了。
至此,移植完成
转发请注明出处