Qt5下QProcess + MPlayer实现QT音乐播放类
一、使用QProcess来调用MPlayer原因
起初由于使用的Qt5,Qt5多媒体播放使用的QMediaPlayer,而QMediaPlayer使用gstreamer后端来播放媒体,gstreamer又不能移植到arm(貌似可以,只是很麻烦)。于是换成Qt4,准备使用phonon + mplayer的方案。可是在后来编译好qt4和phonon以及phonon_backend(libphonon_mplayer.so)之后,在程序中并不能调出mplyer来,不知道是什么原因,估计是phonon_backend编译方法不对吧。于是最后决定,还是换回Qt5,使用QProcess直接调MPlayer的方式来实现。
二、QProcess调用MPlayer方法
我们只需要new一个QProcess,然后通过QProcess的start方法启动mplayer线程即可。如下:
_process = new QProcess();
QStringList args;
args << "-slave"; //使用slave模式
args << "-quiet"; //不要输出冗余信息
_process->start("mplayer", args); //启动该进程,并传入参数args
这样,便可以启动mplayer。
如果我们要控制mplaer呢,使用QProcess的write方法,往mplayer写入命令即可,比如如下:
process->write("pause\n");
这样便可以对mplayer播放进行控制(播放/暂停)。
如果要读取mplayer发出来的消息呢,使用QProcess的readLine方法,方式如下:
_process->readLine(data,200);
这样便可以读取一行mplayer发送出来的信息,然后我们只需要解析这个data即可。
三、MPlayer命令大全
loadfile name //加载媒体文件name
volume 100 1 //设置音量,中间位音量的大小0-100
mute 1/0 //静音开关
pause //播放/暂停
get_time_length //获取播放文件的长度,以秒为单位
seek value //定位,valu为秒数
get_percent_pos //获取播放的百分比
get_time_pos //获取当前播放的位置,以秒为单位
get_file_name //获取当前播放的媒体文件名
get_meta_album //获取专辑
get_meta_artist //获取艺术家
get_meta_comment //获取评论
get_meta_genre //获取流派
get_meta_title //获取标题
get_meta_year //获取年份
四、附录–音乐播放类源码
1.mplayercall.h
#ifndef MPLAYERCALL_H
#define MPLAYERCALL_H
#include <QObject>
#include <QProcess>
class MPlayerCall : public QObject
{
Q_OBJECT
public:
enum MplayerAns //mplayer回复命令
{
ANS_TIME_POSITION, //current time
ANS_PERCENT_POSITION, //percent
ANS_LENGTH, //all time
ANS_EXIT,
};
typedef struct//mplayer回复消息结构
{
MplayerAns ans;//命令
int value; //值
} MplayerReturn;
static MPlayerCall& construction(void)
{
static MPlayerCall obj;
return obj;
}
MPlayerCall();
virtual ~MPlayerCall();
void setMusic(const QString name);//设置待播放音乐但不播放
void setMusicPlay(const QString name);//设置音乐并播放
void pause(void);//暂停
void play(void);//播放
void setVolume(unsigned char volume);//设置音量
void getTimePos(void);//获取当前播放的时间
void getTimeLen(void);//获取音乐文件总长
void seek(