mplayer 只支持16bpp以上的图形显示,而不支持8bpp图形显示,因此,当mplayer程序运行在LCD配置为STN的开发板上时,只能播放声音,不能显示图形,而在LCD配置为TFT的开发板时,既可以播放声音又可以显示图形。
1、下载并解压
进入mplayer的官方网站http://www.mplayerhq.hu的主页,下载MPlayer-0.93.tar.bz2软件包。
cd /work
tar -jxvf MPlayer-0.93.tar.bz2
查看解包出来的README和INSTALL文件,看看有没有安装时特别声明的东西,因为同一个软件的不同版本, 安装的方法有时并不一样。然后输入./configure --help看看有没有多出或减少什么选项
2、源代码bug解决
头文件引用的问题,特别提醒大家的是,在libmpcodecs和libavcodec这两个目录下,有一个疏漏,就是这两个目录的源文件都以#incude “config.h” 的方式引用头文件“config.h”,但是在这两个目录下并不存在该头文件“config.h“,这些源文件实际是期望引用mplayer安装包根目录下的“config.h”头文件,因此我们需要在libmpcodecs和libavcodec这两个目录下手动建立一个名为config.h的链接并指向mplayer安装包根目录下的“config.h”头文件,建立方法:
$> cd libmpcodecs
$> ln –s ../config.h config.h
$> cd ../
$> cd libavcodec
$> ln –s ../config.h config.h
3、交叉编译
在/MPlayer-0.93目录下制作一个脚本文件:mkall,这个脚本是编译脚本,该脚本的内容如下:.
/configure--cc=/usr/local/arm/3.4.1/bin/arm-linux-gcc--target=arm-linux--with-extralibdir=/usr/local/arm/3.4.1/arm-linux/lib/ --with-extraincdir=/usr/local/arm/3.4.1/arm-linux/include/--disable-sdl--enable-static--disable-dvdnav--disable-tv --disable-gui --disable-mpdvdkit --enable-linux-devfs
然后执行./mkall 完成配置。
接着运行make
mplayer的源代码很庞大,又使用到不少第三方的库,没编译几下,就停下来了,出现这样的错误:
./codec-cfg ./etc/codecs.conf > codecs.conf.h
/bin/sh: line 1: ./codec-cfg: cannot execute binary file
按照网上帖子的解决办法:检查了一下,发现codec-cfg这个可执行文件是最先编译产生的一个文件,这个文件是存在的,怎么会执行不了呢?于是手动执行了一下,系统提示“cannot execute binary file”,突然想起来,codec-cfg是按跨平台方式编译的,产生的是arm的代码,当然不能在x86上执行了,那就先用不用跨平台编译的方式,先把mplayer编译成x86的代码,于是重新配置,简单的 ./configure, make,然后将生成的codec-cfg改名为codec-cfg.x86。然后再按跨平台方式配置,编译,等编译器出现错误停止编译时,将codec-cfg.x86该名为codec-cfg,再make
结果出现下面的错误:
codec-cfg.c: In function `parse_codec_cfg':
codec-cfg.c:501: `builtin_video_codecs' undeclared (first use in this function)
codec-cfg.c:501: (Each undeclared identifier is reported only once
codec-cfg.c:501: for each function it appears in.)
codec-cfg.c:502: `builtin_audio_codecs' undeclared (first use in this function),此时需要修改当前的Makefile,将
$(CC) $(CFLAGS) -g codec-cfg.c mp-msg.c -o -----
中的参数$(CC) 改为gcc即可,通过编译。
编译成功后在/MPlayer-0.93目录下生成mplayer文件,该文件为mplayer媒体播放程序。
#cp mplayer /tftpboot 将代码拷贝到指定目录
4、下载运行
启动9200开发板的ARM-Linux 在宿主机上运行命令:
#mount -o nolock -t nfs 202.200.93.154:/tftpboot /mnt
在minicom上运行 :
cd /mnt
./mplayer
出现如下提示信息:
# ./mplayer
MPlayer 0.93-3.4.1 (C) 2000-2003 MPlayer Team
Reading config file /usr/local/etc/mplayer/mplayer.conf: No such file or directory
Reading config file //.mplayer/config
Reading //.mplayer/codecs.conf: can't open '//.mplayer/codecs.conf': No such file or directory
Reading /usr/local/etc/mplayer/codecs.conf: can't open '/usr/local/etc/mplayer/codecs.conf': No such file or directory
Using built-in default codecs.conf
Usage: mplayer [options] [url|path/]filename
Basic options: (complete list in the man page)
-vo
select video output driver & device ('-vo help' for a list)
-ao select audio output driver & device ('-ao help' for a list)
-vcd play VCD (Video CD) track from device instead of plain file
-ss seek to given (seconds or hh:mm:ss) position
-nosound do not play sound
-fs fullscreen playback (or -vm, -zoom, details in the man page)
-x -y set display resolution (for use with -vm or -zoom)
-sub specify subtitle file to use (also see -subfps, -subdelay)
-playlist specify playlist file
-vid x -aid y select video (x) and audio (y) stream to play
-fps x -srate y change video (x fps) and audio (y Hz) rate
-pp enable postprocessing filter (details in the man page)
-framedrop enable frame dropping (for slow machines)
Basic keys: (complete list in the man page, also check input.conf)
<- or -> seek backward/forward 10 seconds
up or down seek backward/forward 1 minute
pgup or pgdown seek backward/forward 10 minutes
< or > step backward/forward in playlist
p or SPACE pause movie (press any key to continue)
q or ESC stop playing and quit program
+ or - adjust audio delay by +/- 0.1 second
o cycle OSD mode: none / seekbar / seekbar + timer
* or / increase or decrease PCM volume
z or x adjust subtitle delay by +/- 0.1 second
r or t adjust subtitle position up/down, also see -vop expand
* * * SEE THE MAN PAGE FOR DETAILS, FURTHER (ADVANCED) OPTIONS AND KEYS * * *
由此可见交叉编译成功。