嵌入式 Mplayer的移植、使用
一、简述
记--移植开源的Mplayer,并在arm开发板简单的使用Mplayer播放音频。
打包:链接:https://pan.baidu.com/s/1NtuLr6-5yWzjpnQhRZB9iQ 密码:etbp
二、Mplayer的移植
2.1 下载源码:http://www.mplayerhq.hu/MPlayer/releases/
( 根据编译环境(系统、工具链版本)及需求(运行环境等)选择合适版本 )
例子中选择的是:
工具链版本:4.4.1 ( 查询命令:arm-linux-gcc -v (或 arm-none-linux-gnueabi-gcc -v) )
编译环境:ubuntu12.01-32bit
运行环境:GEC6818 cortex-A8 (800W*480H)
2.2 生成编译Mplayer所需的头文件和库文件
2.2.1 解压libmad-0.15.1b.tar.gz
解压命令:tar -xzvf libmad-0.15.1b.tar.gz -C . (解压到当前目录下)
2.2.2 检查、配置、生成对应的Makefile
创建目录:/home/liang/mplayer-arm 用来存放生成的头文件和库文件
检查、配置命令:
./configure --enable-fpm=arm --host=arm-linux-gcc --disable-shared --disable-debugging --prefix=/home/liang/mplayer-arm CC=arm-linux-gcc
其中:
--prefix=/home/liang/mplayer-arm (/home/liang/mplayer-arm:指定编译生成的头文件和库文件存放的路径)
--cc=arm-linux-gcc (arm-linux-gcc:指定的编译器,运行环境是在arm开发板,故指定的是arm工具链)
2.2.3 编译
make
修改Makefile 去掉129行
-fforce-mem 标志,因为arm-eabi编译器都不支持这个选项 。
然后再进行: make
2.2.4 生成相应的头文件、库文件
make install
查看生成的头文件和库文件
2.3 编译生成Mplayer
2.3.1 解压MPlayer-1.0rc2.tar.bz2
解压命令:tar -xjvf MPlayer-1.0rc2.tar.bz2 -C .
2.3.2检查、 配置、生成对应的Makefile
./configure --prefix=/home/liang/mplayer-arm --cc=arm-none-linux-gnueabi-gcc --disable-gui --target=arm-linux --host-cc=gcc --disable-freetype --enable-fbdev --disable-mencoder --disable-sdl --disable-live --disable-dvdread --disable-libdvdcss-internal --disable-x11 --enable-cross-compile --disable-dvdnav --disable-dvdread-internal --disable-jpeg --disable-tga --disable-pnm --disable-tv --disable-ivtv --disable-fontconfig --disable-xanim --disable-win32dll --disable-armv5te --disable-armv6 --enable-static
2.3.3 编译
make -j4
其中: -j4 参数表示使用4条线程编译
2.3.4 生成可执行文件Mplayer
2.4 拷贝到开发板的/bin目录,设置可执行权限
设置可执行权限:chmod 777 /bin/mplayer
直接在命令行运行:mplayer xxx.avi (支持多种格式)
三、Mplayer的简单使用
3.1 查看Mplayer 命令列表:mplayer -input cmdlist
3.2 常用到的 Mplayer指令:
loadfile string //参数string 为 歌曲名字。
volume 100 1 //设置音量 中间的为音量的大小。
mute 1/0 //静音开关 mute 1开启静音,mute 0关闭静音
pause //暂停/取消暂停
get_time_length //返回值是播放文件的长度,以秒为单位。
seek value //向前查找到文件的位置播放 参数value为秒数。seek 5 快进5秒,seek -5 快退5秒
get_percent_pos //返回文件的百分比(0--100)
get_time_pos //打印出在文件的当前位置用秒表示,采用浮点数
volume [abs] //增大/减小音量,或将其设置为,如果[abs]不为零。volume 5音量+5, volume -5音量-5
quit [value] //退出MPlayer。可选的整数[value]的值作为返回代码为mplayer的进程(默认值:0)。
get_file_name //打印出当前文件名
get_meta_album //打印出当前文件的'专辑'的元数据
get_meta_artist //打印出当前文件的'艺术家'的元数据
get_meta_comment //打印出当前文件的'评论'的元数据
get_meta_genre //打印出当前文件的'流派'的元数据
get_meta_title //打印出当前文件的'标题'的元数据
get_meta_year //打印出当前文件的'年份'的元数据
3.3 通过命令直接控制 mplayer
控制台:
q:按q(quit)退出。
p:按p(pause)暂停。
s:按s(SCREENSHOT)截图。
代码:
播放:system( "mplayer test.avi &
" ); (&:表示在后台运行)
暂停:system( "killall -STOP mplayer &
" );
继续:system("killall -CONT mplayer &
");
退出:system( "killall mplayer
" );
3.4 通过管道控制 mplayer
mplayer -slave -quiet -input file=/mypipe -zoom -x 400 -y 400 test.avi
其中:
-slave 默认mplayer是从键盘上获得控制信息,在slave模式下,MPlayer在后台运行,不再截获键盘事件。
-quiet 不输出冗余的信息。
-input file=/mypipe 指定mplayer从mypipe管道获取控制命令并执行。(通过mypipe管道控制mplayer)
//-geometry 0:0 从显示屏的(0,0)作为音频显示区域的左上角。(保留)
-zoom -x 400 -y 400 限制视频的播放区域,x方向(宽)为400, y方向(高)为400。
test.avi 要播放的音频路径名。
注: 管道可以使有名管道,也可以是无名管道。
3.5 接收mplayer的返回信息
例如想获取音频文件的长度(秒数):system("echo get_time_length>/mypipe");
( 对于有名管道,还可以这样:write(myfifo_fd,"get_time_length
",strlen("get_time_length
")); )
默认mplayer返回的信息直接输出到标准输出,想要获取这些信息可以这样:
将mplayer返回的信息输出到"自己的文件"(比如创建一个管道),即重定向标准输出:dup2()函数。
例如:
int out_fd = open("/myfifo", O_RDWR); //打开或创建有名管道myfifo
dup2( out_fd, 1 );//将标准输出重定向为out_fd代表的文件,标准输出的文件描述符为 1。
注:mplayer的返回信息可能有其他描述信息,例如发送get_time_length命令,返回可能不仅仅是音频的长度,此时需要附加判断。
获取音频的总时间长度 get_time_length ==》 ANS_LENGTH=秒数 (浮点数)
获取当前播放时刻 get_time_pos ==》 ANS_TIME_POSITION=秒数 (浮点数)
获取当前播放进度百分比 get_percent_pos ==》 ANS_PERCENT_POS=整数 (0--100)
===========================以下回复
RwinR 这位兄弟 ==========
测试播放mp4文件 (接上耳机可以听到声音)
测试播放mp3文件 (接上耳机可以听到声音)