欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

嵌入式 Mplayer的移植、使用

程序员文章站 2022-03-10 16:28:07
...

嵌入式 Mplayer的移植、使用

一、简述

       记--移植开源的Mplayer,并在arm开发板简单的使用Mplayer播放音频。

       打包:链接:https://pan.baidu.com/s/1NtuLr6-5yWzjpnQhRZB9iQ 密码:etbp

二、Mplayer的移植      

       2.1 下载源码:http://www.mplayerhq.hu/MPlayer/releases/    

             ( 根据编译环境(系统、工具链版本)及需求(运行环境等)选择合适版本 )

             嵌入式 Mplayer的移植、使用

              例子中选择的是:

             嵌入式 Mplayer的移植、使用

              工具链版本:4.4.1   ( 查询命令:arm-linux-gcc -v      (或 arm-none-linux-gnueabi-gcc -v)     )

              嵌入式 Mplayer的移植、使用

              编译环境: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 .       (解压到当前目录下)

                      嵌入式 Mplayer的移植、使用

             2.2.2 检查、配置、生成对应的Makefile

                      创建目录:/home/liang/mplayer-arm    用来存放生成的头文件和库文件

                        嵌入式 Mplayer的移植、使用

                      检查、配置命令:

./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工具链)

              嵌入式 Mplayer的移植、使用

             2.2.3 编译

 make

嵌入式 Mplayer的移植、使用

            修改Makefile 去掉129行 -fforce-mem 标志,因为arm-eabi编译器都不支持这个选项 。

           嵌入式 Mplayer的移植、使用          嵌入式 Mplayer的移植、使用

           然后再进行: make 

 嵌入式 Mplayer的移植、使用

            2.2.4 生成相应的头文件、库文件

make install

嵌入式 Mplayer的移植、使用     查看生成的头文件和库文件

嵌入式 Mplayer的移植、使用

 

     2.3 编译生成Mplayer

             2.3.1 解压MPlayer-1.0rc2.tar.bz2

                      解压命令:tar -xjvf MPlayer-1.0rc2.tar.bz2 -C .

         嵌入式 Mplayer的移植、使用

嵌入式 Mplayer的移植、使用

             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

   

嵌入式 Mplayer的移植、使用

             2.3.3 编译

make -j4

              其中:  -j4  参数表示使用4条线程编译 

 嵌入式 Mplayer的移植、使用

             2.3.4 生成可执行文件Mplayer

          嵌入式 Mplayer的移植、使用

     2.4 拷贝到开发板的/bin目录,设置可执行权限

            设置可执行权限:chmod 777 /bin/mplayer

           直接在命令行运行:mplayer xxx.avi     (支持多种格式)

            嵌入式 Mplayer的移植、使用

            嵌入式 Mplayer的移植、使用

三、Mplayer的简单使用

       3.1 查看Mplayer 命令列表:mplayer -input cmdlist

                嵌入式 Mplayer的移植、使用

       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 &\n" );   (&:表示在后台运行)

                 暂停:system( "killall -STOP mplayer &\n" );

                 继续:system("killall -CONT mplayer &\n");

                 退出:system( "killall mplayer\n" );

        

  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\n",strlen("get_time_length\n"));  )

          默认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)

                                                                             嵌入式 Mplayer的移植、使用