Linux下播放器开发-交叉编译Mplayer

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下播放器开发-交叉编译Mplayer相关的知识,希望对你有一定的参考价值。

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) 解压

[root@xiaolong video]# tar xvf libmad-0.15.1b.tar.gz 
[root@xiaolong video]# cd libmad-0.15.1b

(2) 配置生成Makefile

[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。

或者直接使用命令修改:

sed  -i  's/-fforce-mem/ /g'  Makefile

查找文档中的-fforce-mem,然后替换成空。

(4) 编译安装

[root@xiaolong libmad-0.15.1b]# make && make install

(5) 查看编译成功的文件

[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) 解压安装

[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文件

[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参数。

[root@xiaolong MPlayer-1.3.0]# gedit config.mak +33

(4) 编译安装

[root@xiaolong MPlayer-1.3.0]# make && make install

编译安装成功之后,会得到一个mplayer可执行文件,这个就是播放器的命令行程序,运行即可播放视频。

4. 部署运行环境

(1). 拷贝依赖库

拷贝依赖就是需要将mplayer命令运行时,需要的所有库文件找齐,拷贝到开发板的/lib目录下。

然后再将mplayer可执行文件命令拷贝到开发板的/bins目录下。

[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) 测试播放视频

[root@XiaoLong /]# mplayer xiaomaolv.mp4 -zoom -x 800 -y 480

mplayer :是mplayer生成的视频播放命令
xiaomaolv.mp4 : 播放的视频的文件。
-zoom -x 800 -y 480 : 视频缩放的尺寸

后台播放:

[root@XiaoLong /]# mplayer -slave -quiet -fs /video_mp3/xiaomaolv.mp4 &

(3). 修改mplayer默认的播放位置

修改源码:

[root@xiaolong MPlayer-1.3.0]# vim libmpcodecs/vf_vo.c +184

以上是关于Linux下播放器开发-交叉编译Mplayer的主要内容,如果未能解决你的问题,请参考以下文章

Linux下播放器开发-Mplayer命令行使用介绍

#yyds干货盘点#Linux下播放器开发-Mplayer命令行使用介绍

Qt+MPlayer音乐播放器开发笔记:交叉编译MPlayer以及部署到开发板播放演示

MPlayer音乐播放器项目讲解

带音频播放的MPlayer播放器在ARM上的移植笔记

Linux编译mplayer播放badapple及编译fbv加载图片(基于V3S预告板子要开源了)