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
解压完成后会看到两个解压文件夹
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
获得Makefile则表示配置成功
5.编译
make
假如出现如下错误 cc1: error: unrecognized command line option "-fforce-mem"
( vim Makefile去掉-fforce-mem 129行)
修改完毕后重新make
6.最后安装配置
make install
提示没有权限的话 ,更改工具链目录的权限 sudo chmod 777 arm/ -R (arm/是你的arm-linux-gcc编译器的目录,我的话是在/usr/local下,可以通过which arm-linux-gcc命令查看)
再返回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
如果需要移植到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();
}
推荐阅读
-
使用FAAD库对AAC格式的音频进行解码
-
开源一个Android 音视频库,包含了视频录制,视频编解码,视频编辑,常见的OpenGL操作
-
安卓串口库android_serialport_api的简单移植方法,以及一些使用细节(有.so动态库的前提下)
-
linux下使用libmad库实现mp3文件的解码、播放
-
S3C2410下嵌入式数据库SQLite的移植
-
mysql数据库从服务器移植到个人PC的方法
-
移植libjpeg-turbo库到mips32架构跑openwrt系统的开发板上
-
数据库移植遇到的问题
-
嵌入式Linux之我行嵌入式数据库SQLite在2440上的移植
-
Oracle数据库移植MySQL的事项有哪些 ?