嵌入式 Mplayer的移植、使用

2019-07-12 17:04发布

嵌入式 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文件 (接上耳机可以听到声音)