前言:
嵌入式linux几种播放视频的方法:
1、交叉编译mplayer、smplayer等软件,移植到嵌入式平台。这种方法在嵌入式平台不能控制窗口位置,不能很好的嵌入到自己程序的窗口中去。但是实现起来应该比较快。
2、使用qt4的phonon组件。这个需要移植相关的phonon、phononbackend、gstreamer等。
3、使用qt5的QMediaPlayer。也需要移植gstreamer。
一、环境和软件介绍
1、主机环境:Ubuntu16.04
2、交叉编译器: gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)
3、ARM板:kernel:2.6.35,SoC:S5PV210
4、软件包:MPlayer-1.0rc4.tar.bz2,点击下载,或者从非官方下载:http://www.mplayerhq.hu/MPlayer/releases/
二、交叉编译获取mplayer可执行文件
1、交叉编译libmad-0.15.1b
因为mplayer的编译依赖于这个libmad-0.151b的库,所以需要先编译这个,而这个的编译在我的博客里madplay移植已经有教程,这里不再写,参考链接
在我的ubuntu里,我编译libmad-0.151b后的安装路径是:/root/madplay_installed,下面涉及到这个路径的,你要灵活修改为你的。
2、交叉编译MPlayer-1.0rc4
(1)解压:
tar -xvjf MPlayer-1.0rc4.tar.bz2
(2)配置:
cd MPlayer-1.0rc4/
./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --enable-fbdev --enable-static --disable-dvdread --disable-live --disable-mp3lib --enable-mad --disable-win32dll --disable-mencoder --disable-ivtv --disable-dvdnav --disable-dvdread-internal --disable-libdvdcss-internal --enable-libavcodec_a --prefix=/root/mplayer_installed>&1 | tee logfile
注意:
--cc=arm-linux-gcc这选项是指定编译工具链。但是这前提是我已经为我的工具链创建了arm-linux-xxx这样的符号链接,并且将路径导出到了PATH
--prefix=/root/mplayer_installed这个指定的是我自定义的MPlayer-1.0rc4的安装目录
在./configure配置完了后,一定要看打印出来的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉编译工具链
(3)编译:
make -j4
出错1: 发现者mad.h是libmad-0.15.1b编译后生成的,这里说没有是因为这程序找不到
解决方法:就是指定libmad-0.15.1b编译后安装的路径,让该程序能找到mad.h,我这里采用了简单粗暴的方法(这方法不得已,最好不要用)
当前在MPlayer-1.0rc4源码顶层目录
cp /root/madplay_installed/include/mad.h ./
再次编译:
make -j4
出错2:这错误其实很容易想到,因为我们并没有指定libmad-0.15.1b编译后,它的库的安装路径
解决方法:
vim config.mak
找到-lmad,在其后面,添加libmad-0.15.1b编译后,它的库的安装路径:-L/root/madplay_installed/lib
再次编译:
make -j4
安装:
make install
出错:
碰到这种问题,肯定是粘贴出错信息百度啦,最后得知:这个是因为在make install时会调用strip来剔除一些无用的文件,但是此时strip是主机的,而不是目标机的,就出现错误。解决方法是修改config.mak文件,将文件中的“INSTALLSTRIP = -s” 改成“INSTALLSTRIP =”。
vim config.mak
再次安装:
make install
完美编译好了MPlayer-1.0rc4,上图bin/mplayer就是我们要的视频播放器可执行文件。将它部署到开发板使用即可。
提醒:注意工具链的选择跟你开发板有很大关系,如果编译链版本太高,编译出来的可执行程序要求的内核版本就很高;而如果你的内核达不到这可执行程序的最低内核版本要求,那么在你开发板是运行不了这个可执行程序的,会显示说你的内核版本太低。例如我编译好的这个mplayer最起码要在2.6.16的内核版本以上的开发板才能运行。
附上mplayer的使用方法:
1、如果是单独测试:(xxx.avi是avi格式的视频)
./mplayer xxx.avi