mplayer模块使用手册

目录

一、文档简介: 4

二、Mplayer安装编译过程 4

1.安装定点mp3解码库libmad 4

2.安装流媒体支持工具live555 5

3.交叉编译Mplayer 5

三、Mplayer的使用方法 8

1.Mplayer的简单使用 8

2.Mplayer的slave模式 8

一、文档简介:

本文档用于辅助使用者使用mplayer模块进行开发工作。

MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。目前MPlayer已经支持11种音频格式分别为:wavwmawmvmp3mp2oggflacapeaacm4rm4a,支持网络协议分别为:httpmmsrtspftp

开发环境参数:

操作系统:Ubuntu11.04

本机平台:X86

目标平台:Loongson1B开发板

交叉编译工具链:gcc-3.4.6-2f1B交叉编译工具链)

所需软件及工具包:

定点mp3解码库libmad源码包:libmad-0.15-ls1b.tar.gz

流媒体支持工具live555源码包:live555-ls1b.tar.gz

Mplayer播放器源码包:mplayer-ls1b-module.tar.gz

二、Mplayer安装编译过程

PS.本次安装过程,假定mplayer的源码包存放于/opt/mplayer/目录

1.安装定点mp3解码库libmad

由于Loongson1B没有浮点运算单元,而mplayermp3解码默认使用mp3浮点解码库mp3lib,故而移植mplayer1B上,需要编译一个定点mp3解码库libmad

首先请确保1B的交叉编译工具链已经安装到PC上,并将其加入到PATH环境变量中:

#exportPATH=/home/cpu/gcc-3.4.6-2f/bin:$PATH

接下来进行libmad交叉编译过程:

#tarzxvflibmad-0.15-ls1b.tar.gz

#cdlibmad-0.15-ls1b

#./configure--enable-fpm=mips--host=mipsel-linux--disable-shared--disable-debugging--prefix=/opt/mplayer/install/libmadCC="mipsel-linux-gcc"

#make

#makeinstall

执行以上步骤后,即可将libmad安装到/opt/mplayer/install/libmad/

2.安装流媒体支持工具live555

Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEGH.263+DVJPEG视频和多种音频编码,同时实现了对标准流媒体传输协议如RTP/RTCPRTSPSIP等的支持。

Mplayer中需要使用live选项进行编译,则需要先安装live555库,下边是live555库的安装过程:

#tarzxvflive555-ls1b.tar.gz

#cdlive555-ls1b/live/

#cpconfig.armlinuxconfig.mips

#chmod777config.mips

#viconfig.mips

将: CROSS_COMPILE?=arm-elf-

修改为: CROSS_COMPILE?=mipsel-linux-

#./genMakefilesmips

#make

这样就完成了对live555的编译,然后将整个工具包拷贝到指定位置:

#cp../live//opt/mplayer/install/-rf

3.交叉编译Mplayer

首先确认一下定点mp3解码库libmad以及流媒体支持工具live555的安装路径为:/opt/mplayer/install/

由于需要将这两个插件一起编译到mplayer中,所以需要将这两个插件的相关头文件及链接库路径添加到mplayer的编译配置文件中,如下步骤:

#tarzxvfmplayer-ls1b-module.tar.gz

#cdmplayer-ls1b-module

#./config.sh

以上命令为生成默认mplayer编译配置文件config.mak

#viconfig.mak

mplayer编译配置文件作以下修改:

File:./config.mak

#--------Generatedbyconfigure-----------

LANG=C

MAN_LANG=en

TARGET_OS=Linux

DESTDIR=

#设定makeinstallmplayer的安装路径,由于安装到本地目录,所以以下目录设定无关紧要

prefix=$(DESTDIR)/opt/mipsel/mplayer/

BINDIR=$(DESTDIR)/opt/mipsel/mplayer//bin

DATADIR=$(DESTDIR)/opt/mipsel/mplayer//share/mplayer

MANDIR=$(DESTDIR)/opt/mipsel/mplayer//share/man

CONFDIR=$(DESTDIR)/opt/mipsel/mplayer//etc/mplayer

LIBDIR=$(DESTDIR)/opt/mipsel/mplayer//lib

#FFmpeguseslibdirinsteadofLIBDIR

libdir=$(LIBDIR)

AR=ar

#执行config.sh后此处可能被修改成为以下编译工具,但是C++需要的编译工具为g++,若不修改正确则编译出错提示很多未定义

#CC=mipsel-linux-gcc

#CXX=mipsel-linux-gcc

CC=mipsel-linux-gcc

CXX=mipsel-linux-g++

HOST_CC=gcc

RANLIB=true

LDCONFIG=ldconfig

INSTALL=install

#设定编译参数:头文件查找路径,设定出错则出现头文件未找到错误

#EXTRA_INC=

#EXTRAXX_INC=

EXTRA_INC=-I/opt/mplayer/install/libmad/include

EXTRAXX_INC=\

-I/opt/mplayer/install/live/liveMedia/include\

-I/opt/mplayer/install/live/groupsock/include\

-I/opt/mplayer/install/live/UsageEnvironment/include\

-I/opt/mplayer/install/live/BasicUsageEnvironment/include

OPTFLAGS=-I.-I..-I../libavutil-Wall-Wno-switch-Wpointer-arith-Wredundant-decls-O4-pipe-ffast-math-fomit-frame-pointer-D_REENTRANT-DHAVE_CONFIG_H$(EXTRA_INC)

CXXFLAGS=-I.-I..-I../libavutil-Wall-Wno-switch-Wpointer-arith-Wredundant-decls-O4-pipe-ffast-math-fomit-frame-pointer-D_REENTRANT-DHAVE_CONFIG_H-D__STDC_LIMIT_MACROS$(EXTRAXX_INC)

CFLAG_STACKREALIGN=

INSTALLSTRIP=-s

CHARSET=

HELP_FILE=help/help_mp-en.h

EXESUF=

MPLAYER_NETWORK=yes

FTP=yes

STREAMING_LIVE555=yes

LIBNEMESI=no

NATIVE_RTSP=yes

VSTREAM=no

STREAM_CACHE=yes

DVBIN=no

VIDIX=no

VIDIX_INTERNAL=no

VIDIX_EXTERNAL=no

CONFIG_PP=yes

MP3LAME=

LIBMENU=no

MP3LIB=no

LIBWMA=yes

LIBA52=no

LIBMPEG2=no

TREMOR_INTERNAL=yes

TREMOR_LOW=no

FAAD=yes

SPEEX=no

MUSEPACK=no

UNRARLIB=no

PNG=no

JPEG=no

GIF=no

EXTRALIBS=

#添加链接库文件及其路径,设定出错则在连接库文件时出现许多函数提示未定义

#EXTRA_LIB=-lmad-ldl-lm

EXTRA_LIB=\

-L/opt/mplayer/install/libmad/lib\

-L/opt/mplayer/install/live/liveMedia/\

-L/opt/mplayer/install/live/groupsock/\

-L/opt/mplayer/install/live/UsageEnvironment/\

-L/opt/mplayer/install/live/BasicUsageEnvironment/\

-lmad\

-lliveMedia-lgroupsock\

-lUsageEnvironment-lBasicUsageEnvironment\

-ldl-lm

EXTRALIBS_MPLAYER=

EXTRALIBS_MENCODER=

...

...

#make

编译成功后,将会在目录下生成一个mplayer的二进制可执行文件,将其拷贝到开发板的文件系统bin目录,并将需要的链接库文件拷贝到开发板上文件系统的lib目录下就可以运行了。

三、Mplayer的使用方法

1.Mplayer的简单使用

首先看一下mplayer的参数格式:

mplayer[选项][文件|URL|播放列表|]

mplayer[选项]文件1[分选项][文件2][分选项]

mplayer[选项]{文件和选项组}[组专用的分选项]

mplayer[dvd|dvdnav]://[标题|[开始标题]−结束标题][/设备][选项]

mplayervcd://曲目[/设备]

mplayertv://[频道][/输入ID][选项]

mplayerradio://[频道|频率][/捕捉设备][选项]

mplayerpvr://[选项]

mplayerdvb://[卡号@]频道[选项]

mplayermf://[文件掩码|@列表文件][mf选项][选项]

mplayer[cdda|cddb]://曲目[−结束曲目][:速度][/设备][选项]

mplayercue://文件[:曲目][选项]

mplayer

[file|mms[t]|http|http_proxy|rt[s]p|ftp|udp|unsv|icyx|noicyx|smb]://

[用户名:密码@]URL[:端口][选项]

mplayersdp://文件[选项]

mplayermpst://主机[:端口]/URL[选项]

mplayertivo://主机/[list|llist|fsid][选项]

mplayer最简单的方法就是mplayer[文件名],即mplayer后边直接传入需要播放的音频或者视频文件。而通过增加一些选项参数,可以设置播放的一些个性化参数,例如声音大小、字幕、循环播放等,这部分的设定,可以在网上很容易查找到资料,或者参考《MPlayer用户中文手册.pdf》。

2.Mplayer的slave模式

默认mplayer是从键盘上获得控制信息,通过键盘按键,可以快捷控制mplayer的播放参数,mplayer另外提供了一种更为灵活的控制方式,用来进行播放控制——slave模式

slave模式下,mplayer为后台运行其他程序,不再截获键盘事件,mplayer会从标准输入读一个换行符(\n)分隔开的命令。

执行如下命令:

#mplayer-slave-quiet<file>

然后就可以在控制台直接输入slave模式命令进行控制mplayer的播放。

我们也可以通过一个fifo文件(命名管道)进行传递slave命令:

#mkfifo</tmp/fifofile>

#mplayer-slave-inputfile=</tmp/fifofile><file>

对于slave模式的命令这里不作详细说明,可以在《MPlayer用户中文手册.pdf》中查阅相关部分,也可以参考mplayer模块测试例子。

下边主要使用mplayer模块测试例子来介绍如何在程序中通过管道传递slave模式命令给mplayer后台程序:

File:mplayer_test.c

/*

*Copyright(c)2012,广州龙芯中科技术科技有限公司

*Allrightsreserved.

*

*文件名称:mplayer_test.c

*摘要:mplayer模块测试及使用例子

*

*/

/*当前版本:0.0.1

*作者:Ethan,修改日期:20120618

*/

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<fcntl.h>

#include<sys/stat.h>

#include<sys/wait.h>

#include<string.h>

#include<pthread.h>

#include<signal.h>

#include"orders.h"

#defineMAXLEN1024

#defineIPR_FIFO"/tmp/mplayer-cmd"

#defineIPR_FIFO_PARAM"file=/tmp/mplayer-cmd"

#defineFILE_PATH"FirstLove.mp3"

intfd_pipe[2];//管道文件描述符

/**********************************************************************************

*Function(功能):获取mplayer后台程序的打印输出信息

*parameter(参数)

*outout(返回值):

***********************************************************************************/

void*get_player_msg()

{

printf("Get_player_msg:\n");

chardata[MAXLEN];

unsignedintdatalen;

while(1)

{

memset(data,0,sizeof(data));

datalen=read(fd_pipe[0],data,sizeof(data));

printf("%s\n",data);

}

}

/**********************************************************************************

*Function(功能):通过管道传递命令给mplayer

*parameter(参数)cmd-slave模式命令

*outout(返回值):

***********************************************************************************/

voidmplayer_slave_cmd(char*cmd)

{

printf("Mplayer_slave_cmd:%s\n",cmd);

chardata[MAXLEN];

strcpy(data,cmd);

intdatalen=strlen(data);

data[datalen++]='\n';

data[datalen]=0;

intfp=0;

fp=open(IPR_FIFO,O_RDWR);

write(fp,data,datalen);

close(fp);

}

/**********************************************************************************

*Function(功能)mplayer模块测试及使用例子

*parameter(参数)

*outout(返回值):

***********************************************************************************/

intmain()

{

pid_tpid;

pthread_ttid_msg;

pthread_mutex_tpmutex;

//建立命名管道

unlink(IPR_FIFO);

mkfifo(IPR_FIFO,O_CREAT|0666);

//建立无名管道用于重定向接收mplayer的后台打印信息

if(pipe(fd_pipe)<0)

{

perror("pipeerror\n");

unlink(IPR_FIFO);

exit(0);

}

pid=fork();

if(pid<0)

{

close(fd_pipe[0]);

close(fd_pipe[1]);

unlink(IPR_FIFO);

perror("fork");

exit(0);

}

if(pid==0)

{

//标准输出重定向至管道

close(fd_pipe[0]);

dup2(fd_pipe[1],1);

//启动mplayer程序,为携带文件信息,处于等待命令状态

if(execlp("mplayer","mplayer","-slave","-nocache","-novideo",

"-input",IPR_FIFO_PARAM,"-idle","-srate","48000",NULL)==-1)

{

printf("ERROR:Cannotstartmplayer!!\n");

}

printf("MPlayerprogressexit!!\n");

exit(0);

}

else

{

//创建线程用以接收mplayer的打印信息

if(!pthread_create(&tid_msg,NULL,get_player_msg,NULL))

{

pthread_detach(tid_msg);

}

else

{

printf("ERROR:Cannotcreatethreadget_msg_player\n");

}

pthread_mutex_init(&pmutex,NULL);

}

sleep(5);

//测试slave模式

//首先传入mp3文件路径,进行音频播放

charcmd[MAXLEN];

sprintf(cmd,"%s%s",ORDER_PLAY,FILE_PATH);

mplayer_slave_cmd(cmd);

sleep(10);

//暂停功能

mplayer_slave_cmd(ORDER_PAUSE);

pthread_join(tid_msg,NULL);

wait(NULL);

return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值