准备
创建构建目录:
mkdir ~/build
zlib
交叉编译
1. 找到源码包,解压到构建目录:
tar xvf zlib-1.2.11.tar.xz -C /home/china/build
2. 进入解压目录
cd /home/china/build/zlib-1.2.11
3. 配置
export CC=arm-linux-gcc
./configure --prefix=/home/china/build/zlib-arm
4. 编译安装
make && make install
mplayer
交叉编译
Mplayer
源码下载网址:
http://www.mplayerhq.hu/MPlayer/releases/
选择版本
MPlayer-1.4
1.
解压、进入解压后的源码目录,修改源码
默认情况下,
mplayer
会启用双缓存技术,在
ARM
开发板上播放视频时,会导致屏幕闪烁,需要禁用
打开源码目录下的
libvo/video_out.c
找到
int vo_doublebuffering=1;
修改为
int vo_doublebuffering=0;
保存退出
2.
配置选项
3.
编译
time make
4.
安装
make install
注:安装时会出现错误
install -m 755 -s mplayer /home/china/build/mplayer-arm/bin
strip: Unable to recognise the format of the input file `/home/china/build/mplayer
arm/bin/mplayer’
install: strip process terminated abnormally
原因是
install
时默认使用的
strip
指令不正确,修改
Makefile
手动指定即可
5.
移植
把最终生成的的
mplayer
移植到开发板的
/usr/bin
目录下即可。记得添加可执行权限。
./configure
--prefix
=
/home/china/build/mplayer-arm
--cc
=
arm-linux-gcc
--
disable-gui --target
=
arm-linux
--host-cc
=
gcc
--disable-freetype --enable
fbdev --disable-mencoder --disable-sdl --disable-live --disable-dvdread --
disable-x11 --enable-cross-compile --disable-dvdnav --disable-jpeg --disable
tga --disable-pnm --disable-tv --disable-ivtv --disable-fontconfig --disable
xanim --disable-win32dll --disable-armv5te --disable-armv6 --enable-static --
extra-cflags
=
"-I/home/china/build/zlib-arm/include"
--extra-libs
=
"-
L/home/china/build/zlib-arm/lib -lz"
vim
Makefile
#
找到原始的安装指令(
860
行左右),如下:
$(INSTALL)
-m 755
$(INSTALLSTRIP) $< $(BINDIR)
#
修改为如下:
$(INSTALL)
-m 755
$(INSTALLSTRIP)
--strip-program=arm-linux-strip
$< $(BINDIR)
#
保存退出
#
重新
make install
1、在自己的工作目录下创建一个管道文件
mkfifo /home/china/1.fifo
2、播放音视频文件
播放指令:
mplayer -slave -quiet -input file=/home/china/1.fifo -geometry 0:0 -zoom -x 640 -y 480 test.mp4
指令说明:
-slave 表示使用mplayer的控制模式
-quiet 表示不输出解码信息
-input file 用于指定与mplayer通信的文件
-geometry 表示显示的起始坐标
-zoom 表示设置分辨率
test.mp4 就是要播放的文件
如果使用程序代码,则调用system函数,把上述指令作为参数即可,如:
system("mplayer -slave -quiet -input file=/home/china/1.fifo -geometry 0:0 -zoom -x 640 -y 480 test.mp4 ")
3、与mplayer通信
一般的做法是:
先打开播放时指定的管道文件
再创建一个新线程播放多媒体文件
然后主线程通过往指定的fifo文件中写控制指令,典型代码如下:
fd = open("/home/china/1.fifo", O_RDWR);
if (fd == -1)
{
perror("open fifo error");
exit(1);
}
while (1)
{
// 获取点击的坐标值
pos = get_position();
printf("(%d, %d) \n", pos.x, pos.y);
// 判断坐标值的范围,根据坐标范围确定要执行的功能
if (pos.x >= 0 && pos.x < 400 && pos.y >= 380 && pos.y < 480)
{
// 创建一个新的执行分支,新的分支播放音频和视频文件
pthread_t tid;
pthread_create(&tid, NULL, play, (void*)filenames[index]);
}
// 暂停
if (pos.x >= 400 && pos.x < 800 && pos.y >= 380 && pos.y < 480)
{
// 发送暂停指令
const char* cmd = "pause\n";
int ret = write(fd, cmd, strlen(cmd));
printf("write cmd %d bytes \n", ret);
}
}
暂停指令说明:
如果mplayer正在播放,发送暂停指令,会暂停播放
如果mplayer处于暂停状态,发送暂停指令,则继续播放