Qt5下QProcess + MPlayer实现QT音乐播放类

本文介绍如何在Qt5环境下利用QProcess调用MPlayer来实现音乐播放功能,详细阐述了选用QProcess的原因,QProcess调用MPlayer的步骤,以及如何控制播放并读取MPlayer反馈信息。并提供了音乐播放类的源码文件mplayercall.h和mplayercall.cpp供参考。
摘要由CSDN通过智能技术生成

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(
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值