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

网友投稿 876 2022-05-30

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

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

(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

5G媒体 Linux

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云的Kubernetes实践之路
下一篇:PHP array_multisort()函数超详细理解
相关文章