分类: 嵌入式
2010-01-09 20:48:42
主机系统:fedora8 + vmware
目标板:utu2440 / linux-
交叉编译器:arm-linux-gcc-3.4.1
软件资源:libmad-0.15.1b.tar.gz
MPlayer-1.0rc2.tar.bz2
移植步骤:
1. 编译libmad-
# CC=arm-linux-gcc ./configure --prefix=/opt/madplay --host=arm-linux --disable-shared
# make
# make install
2. 解压mplayer
# tar jxf /mnt/hgfs/share/ MPlayer-1.0rc2.tar.bz2 –C /home/work_dir
3. 交叉编译mplayer
# ./configure --cc=arm-linux-gcc --target=arm-linux --enable-static \
--prefix=/tmp/mplayer-rc2 --disable-win32dll --disable-dvdread \
--enable-fbdev --disable-mencoder --disable-live --disable-mp3lib \
--enable-mad --enable-libavcodec_a --language=zh_CN \
--disable-armv5te --disable-armv6 \
--with-extraincdir=/opt/madplay/include \
--with-extralibdir=/opt/madplay/lib
配置主要参考了http://www.cnitblog.com/puppypyb/archive/2008/09/09/48875.html
配置参数含义如下:
--cc
交叉编译工具,如果没添加到环境变量,就要指定完整路径
--target
在pre版本中,对于--target和这个配置参数是这样描述的:
===============================================
--target=arm-armv4l-linux这个参数要注意的是一个分三部分,第一部分的arm是指arch,这里设定为arm;第二部分的armv4l是指具体的版本,这个要注意了,一定要跟libavcodec目录下的平台目录名一致,否则为这个平台的优化代码没办法编译进去(据我观察是这样的);第三部分是系统平台。
===============================================
但是在rc2版本中,只需要--target=arm-linux这样指定就好了。
--enable-static
是设定静态连接,不需要依赖动态库
--prefix=/tmp/mplayer-rc2
make install后,可执行程序就安装在/tmp/mplayer-rc2目录下。
--disable-win32dll
禁用win32动态链接库支持。
--disable-dvdread
禁用libdvdread.
--enable-fbdev
支持fbdev,这个一定要选上。
--disable-mp3lib 和 --enable-mad
arm系列的cpu,一般都没浮点运算单元,而mplayer的mp3解码默认使用mp3lib,这个是浮点运算库,在arm上肯定跑不了,使用ffmp3或者libmad(需要外部库libmad支持)应该就没问题了。所以这里需要禁止掉mencoder和使能libmad。
--disable-mencoder
禁止编码功能
--disable-live
禁止live 555流媒体
--enable-libavcodec_a
启用静态的libavcodec解码。在pre版本中该参数为--enable-libavcodec。
--disable-armv5te --disable-armv6
禁用armv5te、armv6指令扩展。
--with-extraincdir和-with-extralibdir
指定libmad和mad.h的路径。mad的路径被添加到编译参数-I和-L后面。
注:在pre版本中需要指定--host-cc=gcc配置参数。用来编译一些需要在host上执行的中间文件的,如codec-cfg,切记不能缺少。但在rc2版本中该参数可以省略掉。
# make
没编译几下,就停下来了,出现这样的错误:
./codec-cfg ./etc/codecs.conf > codecs.conf.h
/bin/sh: line 1: ./codec-cfg: cannot execute binary file
# file codec-cfg查看得知codec-cfg是已交叉编译过的可执行文件,在主机上是不能运行的,于是参考网上的方法先把mplayer重新配置编译成x86的代码,简单的 ./configure, make,然后将生成的codec-cfg改名为codec-cfg.x86。然后再按跨平台方式配置,编译,等编译器出现错误停止编译时,将codec-cfg.x86该名为codec-cfg,再make,这次编译通过。
4.拷贝mplayer到rootfs/bin/,重启开发板,在命令行测试mplayer
[root@liuzg]# mplayer
MPlayer 1.0rc2-
CPU: ARM
用法: mplayer [选项] [URL|路径/]文件名
基本选项: (完整列表参见手册页)
-vo
-ao
vcd://
dvd://
-alang/-slang 选择 DVD 音轨/字幕的语言(使用两字符的国家代号)
-ss
-nosound 不播放声音
-fs 全屏播放 (或者用 -vm, -zoom, 详见于手册页)
-x
-sub
-playlist
-vid x -aid y 选择用于播放的 x 视频流和 y 音频流通道号
-fps x -srate y 改变视频率为 x 帧秒(fps)和音频率为 y 赫兹(Hz)
-pp
-framedrop 使用丢帧(用于慢机器)
基本控制键: (完整的列表参见于手册页, 同时也请核查 input.conf)
<- or -> 后退/快进 10 秒
down or up 后退/快进 1 分钟
pgdown or pgup 后退/快进 10 分钟
< or > 跳到播放列表中的前一个/后一个
p or SPACE 暂停播放(按任意键继续)
q or ESC 停止播放并退出程序
+ or - 调整音频延迟增加/减少 0.1 秒
o 循环 OSD 模式: 无/搜索条/搜索条加计时器
* or / 增加或减少 PCM 音量
x or z 调整字幕延迟增加/减少 0.1 秒
r or t 上/下调整字幕位置, 参见“-vf expand”
# mplayer vedio.mp4
[root@liuzg]# mplayer vedio.mp4
MPlayer 1.0rc2-
CPU: ARM
正在播放 vedio.mp4。
检测到 Quicktime/MOV 文件格式。
[mov] 找到视频流,-vid 0
[mov] 找到音频流,-aid 1
此时图像和音频都已正常输出。之前参考网上的各种方法试过其它几个版本的mplayer和arm-linux-gcc-