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

mplayer解码库的移植

程序员文章站 2022-03-10 16:22:19
...
---------linux系统的多媒体处理---------
音频解码库:madplay   
视屏解码:mplayer  
音频录制:alsa

-----------------------------------开源免费-------------------------------------
1.解压源码
把所有的源码包复制到/home/gec中家目录 
cp  *    /home/gec     PS:(防止在共享目录中解压源码包,因为共享目录不支持连接文件)

解压源码包:
tar  -xjvf  MPlayer-1.0rc2.tar.bz2
tar  -xzvf  libmad-0.15.1b.tar.gz 
mplayer解码库的移植

解压完成后会看到两个解压文件夹

mplayer解码库的移植
2.准备交叉开发工具链
配置方法:可查看交叉开发笔记 
需要作的软链接:
sudo ln -s arm-none-linux-gnueabi-gcc     arm-linux-gcc
sudo ln -s arm-none-linux-gnueabi-ar      arm-linux-ar
sudo ln -s arm-none-linux-gnueabi-ranlib  arm-linux-ranlib
sudo ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy
sudo ln -s arm-none-linux-gnueabi-g++     arm-linux-g++
sudo ln -s arm-none-linux-gnueabi-strip   arm-linux-strip
sudo ln -s arm-none-linux-gnueabi-cpp     arm-linux-cpp
sudo ln -s arm-none-linux-gnueabi-size    arm-linux-size
sudo ln -s arm-none-linux-gnueabi-ld      arm-linux-ld

3.交叉编译libmad解码库介绍(这一步不需要进行操作)
./configure --enable-fpm=arm  //芯片平台  
            --host=arm-linux  //使用的工具链平台
            --disable-shared  //生成库的属性  动态库
          --disable-debugging //关闭错误信息
           --prefix=/usr/local/arm/arm-2009q3/lib  //make install 后库的安装路径(必须要跟工具链的库一致)
           CC=/usr/local/arm/arm-2009q3/bin/arm-linux-gcc  使用的工具链所在的路径
 (必须要跟工具链所在的位置一致)


4.配置libmad解码库
进入libmad源码目录:
 cd libmad-0.15.1b/ 
配置makefile:
./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/arm-2009q3/lib CC=/usr/local/arm/arm-2009q3/bin/arm-linux-gcc
mplayer解码库的移植

获得Makefile则表示配置成功


5.编译
make 
假如出现如下错误 cc1: error: unrecognized command line option "-fforce-mem"
 ( vim Makefile去掉-fforce-mem 129行)
  mplayer解码库的移植
mplayer解码库的移植

修改完毕后重新make


6.最后安装配置
make install     
提示没有权限的话  ,更改工具链目录的权限  sudo chmod 777 arm/  -R (arm/是你的arm-linux-gcc编译器的目录,我的话是在/usr/local下,可以通过which  arm-linux-gcc命令查看)
mplayer解码库的移植

mplayer解码库的移植


再返回libmad-0.15.1b/ 目录进行安装

7.交叉编译mplayer源码得到arm版本的播放器
进入MPlayer-1.0rc/目录
        cd MPlayer-1.0rc2/

配置makefile脚本:
./configure --cc=/usr/local/arm/arm-2009q3/bin/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 --disable-ivtv --with-extraincdir=/usr/local/arm/arm-2009q3/lib/include --with-extralibdir=/usr/local/arm/arm-2009q3/lib/lib --host-cc=gcc --enable-ossaudio

8.编译mplayer播放器
make  (这个过程需要几分钟时间,要耐心等待)


至此,mplayer播放器在linux的移植已完成,可在MPlayer-1.0rc目录中看到mplayer
mplayer解码库的移植

如果需要移植到arm开发板上只需要下载mplayer到开发板对的/bin目录下即可

----------------------------------------------------------------------------------------------------------------------------------------
接下来是mplayer的使用的示例程序:
【mplayer.c】
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

void *player(void *arg)
{

  system("mplayer -slave -quiet -input  file=/pipe   -zoom -x 800 -y 480  dream.avi");

}

int main()
{
//创建一个进程去获取时间 
 pid_t fpid=fork();
 //子进程
if(fpid == 0)
{
    int pidfd=open("/pipe1",O_RDONLY);
char buf[1024*4]={0};
while(1)
{
bzero(buf,1024*4);
read(pidfd,buf,1024*4);
printf("buf=%s\n",buf);
sleep(1);
}
}
//在父进程中
else if(fpid>0)
{
pthread_t pid;
pthread_create(&pid,NULL,player,NULL);
           //打开mplayer管道文件 
           int fd=open("/pipe",O_RDWR);
//打开另外一个管道文件用来捕抓进程信息 
    int msgfd=open("/pipe1",O_RDWR);
   //把捕抓标准输出中的内容
dup2(msgfd,1);
while(1)
{
//write(fd,"get_time_pos\n",strlen("get_time_pos\n"));
system("echo get_time_pos >> /pipe");
sleep(1);
}
}
//等待进程结束
wait();

}