C语言|mplayer解码库的移植

---------linux系统的多媒体处理--------- 音频解码库: madplay视屏解码: mplayer音频录制: alsa
-----------------------------------开源免费------------------------------------- 1.解压源码 把所有的源码包复制到/home/gec中家目录cp*/home/gecPS:(防止在共享目录中解压源码包,因为共享目录不支持连接文件)
解压源码包: tar-xjvfMPlayer-1.0rc2.tar.bz2 tar-xzvflibmad-0.15.1b.tar.gzC语言|mplayer解码库的移植
文章图片


解压完成后会看到两个解压文件夹
C语言|mplayer解码库的移植
文章图片

2.准备交叉开发工具链 配置方法:可查看交叉开发笔记需要作的软链接: sudo ln -s arm-none-linux-gnueabi-gccarm-linux-gcc sudo ln -s arm-none-linux-gnueabi-ararm-linux-ar sudo ln -s arm-none-linux-gnueabi-ranlibarm-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-striparm-linux-strip sudo ln -s arm-none-linux-gnueabi-cpparm-linux-cpp sudo ln -s arm-none-linux-gnueabi-sizearm-linux-size sudo ln -s arm-none-linux-gnueabi-ldarm-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 C语言|mplayer解码库的移植
文章图片


获得 Makefile则表示配置成功

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


修改完毕后重新make

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


C语言|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 C语言|mplayer解码库的移植
文章图片


如果需要移植到arm开发板上只需要下载mplayer到开发板对的/bin目录下即可
---------------------------------------------------------------------------------------------------------------------------------------- 接下来是mplayer的使用的示例程序: 【mplayer.c】

#include #include 【C语言|mplayer解码库的移植】#include #include #include #include #include #include #include void *player(void *arg) {system("mplayer -slave -quiet -inputfile=/pipe-zoom -x 800 -y 480dream.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(); }





















    推荐阅读