200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 基于MPlayer的QT媒体播放器

基于MPlayer的QT媒体播放器

时间:2022-08-07 11:42:52

相关推荐

基于MPlayer的QT媒体播放器

这几天在做关于qt的东西,开始做的基于RTSP的播放器,我用的是MPlayer,可是卡着了,链接的时候老是出差错,只能播放完整的媒体,不能处理流媒体,既然这样我就做一个本地媒体播放器了。我们知道在qt中同一个界面上的部件,如果不使用进程或线程,当一个部件处于活动时,整个界面会处于一种冻结的状态,所以这里我使用了进程。

1.新建Qt项目,类名为mplayer_video。下一步,下一步,我们在系统生成的ui界面上添加按钮(pushbutton),有打开、播放/暂停、快进、快退、增加音量、减小音量,下一媒体,上一媒体,还有一个widget,用于显示视频。

2.在mplayer_video.h的private里添加两个成员:

QProcess *process; //定义一个进程,使用进程进行操作,这样不会冻结界面

QString arg;//定义一个arg,用来存放要使用的播放器路径,我在这里使用的是mplayer,当然,如果只播放 //音频,可以用madplay

然后再mplayer_video.cpp的构造函数中加入他们的初始化:

process = new QProcess;

arg = "/bin/mplayer"; // 我的mplayer放在了/bin/mplayer

然后再在构造函数中添加:

QStringList::Iterator ptr; // ptr是指向QStringList每个数据项的指针,

int i=0;

int j=0;

QString path_name[100]; //用来存放每个文件的路径

3.我们现在先对打开按钮设置信号和槽,单击它,选则“go to slot”,跳到槽函数:进行编写

void mplayer_video::on_pushButton_open_clicked()

{

process->close(); //每一次新打开时都要把正在播放的关掉

QStringList filenames = QFileDialog::getOpenFileNames(this,tr("选择文件"),"/",tr("视频文件(*mp3 *wma *3gp *wav *avi *rmvb *mkv *ts *wmv)")); // *号和前面的要隔开至少一个空格,不能连起来。

for(ptr=filenames.begin();ptr<filenames.end();ptr++)

{

path_name[i] = *ptr; //把里面的每个文件的路径放到path_name里

i++;

}

QStringList arg1;

arg1 << path_name[j];

arg1 << "-slave";//默认情况下,mplayer接受键盘的命令,而"-slave"使其不再接受键盘事件,而是作为后台程序运//行,接受以“\n”结束的命令控制,这样我们可以在进程中给他发送命令,而不需要操作键盘了.

arg1 << "-quiet"; //尽可能的不打印播放信息

arg1 << "-zoom"; //视频居中,四周黑条,全屏播放

arg1 << "-wid" << QString::number((unsigned int)(ui->widget->winId()));

// "-wid <窗口标识>" 是指让MPlayer依附于那个窗口,ui->widget->winId() 这个指令就是用来获取widget的标识//码 ,这样视频播放的时候,就在这个部件里播放,相当于给他固定起来。

process->start(arg,arg1); //开始播放进程

}

4.给暂停/播放添加槽函数,步骤同上:编写代码:

void mplayer_video::on_pushButton_zanting_clicked() //p后直接加\n,之间不能有空格

{ //它有两个功能,一个是暂停,再俺一下是播放

process->write("p\n");

}

5.给增加音量添加槽函数,同上:

void mplayer_video::on_pushButton_addvoice_clicked() // volume是声音控制的关键字,他要和后面给的数字有至少

{// 一个空格,如果不加空格会有问题,你按下没有效果的

process->write("volume +2\n"); //没按一下,声音增加两个单位

}

6.给减小音量添加槽函数:

void mplayer_video::on_pushButton_reducevoice_clicked()

{

process->write("volume -2\n"); //同上

}

7.添加快进槽函数:

void mplayer_video::on_pushButton_quick_clicked() //seek是播放进度控制的关键字,他要和后面给的数字有至少

{ //一个空格,不加空格会有问题,你按下没有效果

process->write("seek +10\n");

}

8.添加快退槽函数:

void mplayer_video::on_pushButton_back_clicked()

{

process->write("seek -10\n"); //同上

}

9.添加下一媒体槽函数:

oid mplayer_video::on_pushButton_next_clicked() //下一媒体 只需要在第一个媒体和最后一个媒体判断一下就好了,

{//第一个媒体的上一个媒体是最后一个,最后一个媒体的下一个是第一个

process->close();

j=j+1;

if(j>i-1)

j=0;

QStringList arg1;

arg1 << path_name[j];

arg1 << "-slave";

arg1 << "-quiet";

arg1 << "-zoom";

arg1 << "-wid" << QString::number((unsigned int)(ui->widget->winId()));

process->start(arg,arg1); //开始进程

}

10.添加下一媒体槽函数:

void mplayer_video::on_pushButton_prio_clicked() //上一媒体

{//第一个媒体的上一个媒体是最后一个,最后一个媒体的下一个是第一个

process->close();

j=j-1;

if(j<0)

j=i-1;

QStringList arg1;

arg1 << path_name[j];

arg1 << "-slave";

arg1 << "-quiet";

arg1 << "-zoom";

arg1 << "-wid" << QString::number((unsigned int)(ui->widget->winId()));

process->start(arg,arg1); //开始进程

}

11.现在就可以播放媒体文件了,试试吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。