1. 前言
MPlayer是一款开源多媒体播放器,在主流的Linux、windows、Mac OS 都能运行,主要广泛用在Linux系统上; Mplayer不仅支持图形界面、也支持命令行播放。这篇文章就介绍如何将MplayerJ交叉编译移植到嵌入式开发板上运行,在命令行上正常的播放视频,LCD屏采用的帧缓冲驱动框架渲染图像。
开发板采用友善之臂的Tiny4412开发板,MCU是三星的EXYNOS4412,板子上接的LCD分辨率为800*480,帧缓冲驱动框架接口,Linux内核版本是3.5,系统不带图形界面,文件系统是采用busybox制作的最小根文件系统,整个系统比较精简。交叉编译器采用arm-linux-gcc 4.5.1版本。
在命令行运行Mplayer时,支持主模式和从模式两种运行模式,主模式就是正常模式,Mplayer会监听键盘事件,根据键盘上的快捷键完成静音、音量加减、字幕控制、快进、快退等操作。如果想要主进程通过代码控制播放器完成指定一些播放操作,就可以使用从模式播放,在从模式下可以通过管道与mplayer进行通信,完成视频播放加载、暂停、停止、快进、快退等功能。
2. 移植libmad库
默认情况下Mplayer采用自带的mp3lib库来进行mp3解码,但是ARM系列的cpu,一般都没浮点运算单元,而mplayer的mp3解码默认使用的mp3lib是浮点运算库,arm上跑不了,移植mplayer之前需要先编译libmad库。
libmad是一个开源的高精度 MPEG 音频解码库。LIBMAD提供24-bit的PCM 输出,完全是定点计算,非常适合没有浮点支持的平台上使用。使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3数据解码工作。在libmad 的源代码文件目录下的 mad.h文件中,可以看到绝大部分该库的数据结构和 API 等。
下载地址: http://www.linuxfromscratch.org/blfs/view/svn/multimedia/libmad.html
(1) 解压
代码语言:javascript复制[root@xiaolong video]# tar xvf libmad-0.15.1b.tar.gz
[root@xiaolong video]# cd libmad-0.15.1b
(2) 配置生成Makefile
代码语言:javascript复制[root@xiaolong libmad-0.15.1b]# ./configure CC=arm-linux-gcc --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=$(pwd)/_install
--prefix=$(pwd)/_
install 指定最终生成的库文件的安装路径。
(3) 修改Makefile
删除Makefile大约29行处的-fforce-mem。
或者直接使用命令修改:
代码语言:javascript复制sed -i 's/-fforce-mem/ /g' Makefile
查找文档中的-fforce-mem,然后替换成空。
(4) 编译安装
代码语言:javascript复制[root@xiaolong libmad-0.15.1b]# make && make install
(5) 查看编译成功的文件
代码语言:javascript复制[root@xiaolong libmad-0.15.1b]# cd _install/
[root@xiaolong _install]# ls
include lib
include和lib两个文件夹,对应文件夹中生成mad.h和libmad.a文件,这两个文件供mplayer编译用。
3. 交叉编译MPlayer-1.3.0
下载地址: http://www.mplayerhq.hu/design7/news.html
(1) 解压安装
代码语言:javascript复制[root@xiaolong video]# tar xvf MPlayer-1.3.0.tar.gz
[root@xiaolong MPlayer-1.3.0]# cd MPlayer-1.3.0
(2) 配置生成config.mak文件
代码语言:javascript复制[root@xiaolong MPlayer-1.3.0]# ./configure --prefix=$PWD/mplayer_installdir --cc=arm-linux-gcc --host-cc=gcc --target=arm-linux --enable-cross-compile --enable-mad --disable-gui --disable-menu --disable-x11 --yasm="" --extra-cflags=-I/work/video/libmad-0.15.1b/_install/include --extra-ldflags=-L/work/video/libmad-0.15.1b/_install/lib/ 2>&1 |tee logfile
上面-I和-L指定的路径是libmad库编译安装生成的路径,根据自己的libmad库路径填写。
(3) 修改config.mak文件
去掉config.mak 33行处的-s参数。
代码语言:javascript复制[root@xiaolong MPlayer-1.3.0]# gedit config.mak 33
(4) 编译安装
代码语言:javascript复制[root@xiaolong MPlayer-1.3.0]# make && make install
编译安装成功之后,会得到一个mplayer可执行文件,这个就是播放器的命令行程序,运行即可播放视频。
4. 部署运行环境
(1). 拷贝依赖库
拷贝依赖就是需要将mplayer命令运行时,需要的所有库文件找齐,拷贝到开发板的/lib目录下。
然后再将mplayer可执行文件命令拷贝到开发板的/bins目录下。
代码语言:javascript复制[root@xiaolong MPlayer-1.3.0]# cp mplayer /work/rootfs/bin/ -fv
[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libncurses*.so* /work/rootfs/lib/ -rf
[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libpng*.so* /work/rootfs/lib/ -rf
[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libasound*.so* /work/rootfs/lib/ -rf
[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libz.so* /work/rootfs/lib/ -rf
[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libjpeg.so* /work/rootfs/lib/ -rf
[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libfreetype.so* /work/rootfs/lib/ -rf
(2) 测试播放视频
代码语言:javascript复制[root@XiaoLong /]# mplayer xiaomaolv.mp4 -zoom -x 800 -y 480
mplayer :是mplayer生成的视频播放命令 xiaomaolv.mp4 : 播放的视频的文件。 -zoom -x 800 -y 480 : 视频缩放的尺寸
后台播放:
代码语言:javascript复制[root@XiaoLong /]# mplayer -slave -quiet -fs /video_mp3/xiaomaolv.mp4 &
(3). 修改mplayer默认的播放位置
修改源码:
代码语言:javascript复制[root@xiaolong MPlayer-1.3.0]# vim libmpcodecs/vf_vo.c 184