这几天在做关于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.现在就可以播放媒体文件了,试试吧。

基于MPlayer的QT媒体播放器相关推荐

  1. linux 嵌入式 播放器,基于Linux的嵌入式媒体播放器研究

    摘要: 计算机多媒体技术和嵌入式技术的高速发展,各种集计算机.通信.消费电子产品等特征于一体的电子产品得以广泛应用,嵌入式媒体播放器已经成为此类产品中主要的应用软件.同时,随着Linux系统在各种嵌入 ...

  2. C++基于ffmpeg和QT开发播放器~学习笔记

    C++基于ffmpeg和QT开发播放器 B站网址 https://www.bilibili.com/video/BV1h44y1t7D8?p=2&spm_id_from=pageDriver ...

  3. 使用进程、mplayer命令实现媒体播放器

    本期分享的是使用进程.mplayer应用使用mplayer命令实现一个媒体播放器的功能,本次使用到的主要有进程间通信(pipe),字符串的操作,多函数功能整合等. 功能主流程图如下: 各个分支模块的流 ...

  4. 基于FFmpeg和Qt的播放器 QtAV库

    参与项目开发: https://github.com/wang-bin/QtAV 下载编译好的文件等:https://sourceforge.NET/projects/qtav win下编译好的可执行 ...

  5. Linux项目设计:斗罗大陆宣传系统、基于Linux系统的媒体播放器、可播放音视频图片(基于gec6818项目设计)

    哔哩哔哩项目视频链接:https://www.bilibili.com/video/BV1Hp4y1v7Pt 代码资料链接:https://download.csdn.net/download/mbs ...

  6. 基于mplayer的简易影音播放器

    快进/快退/暂停/退出/播放/播放上一个/播放下一个/音量变大/音量变小/静音....                  mplayer开源的多媒体播放器.                       ...

  7. 基于QT平台的手持媒体播放器项目实战视频教程下载

    分享一套关于在QT平台的手持媒体播放器项目实战的视频教程,Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架. 它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工 ...

  8. 【翻译】HTML5基于浏览器的媒体播放器:可以离线播放你的mp3文件

    原文地址:http://www.omgubuntu.co.uk/2011/03/html5-browser-based-media-player-plays-your-mp3s-works-offli ...

  9. QT实现Media Player(媒体播放器)

    QT实现Media Player 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 Media Player示例使用Microsoft Media Player Act ...

  10. upnp 播放器 android,基于Android系统的UPNP媒体播放器的研究与实现

    摘要: 近几年来,"数字家庭网络"的发展备受人们的关注,如何通过有线或无线的方式将多个网络设备及家庭设备互联互通,最终实现设备之间自动发现.智能互联.相互控制.资源共享等操作,是目 ...

最新文章

  1. 应用hibernate中的hql语句对日期的操作总结
  2. SpringMVC访问静态页面
  3. VC++ 19 (VS2015) 编译器系统环境变量配置
  4. 【OpenCV 例程200篇】09. 图像的裁剪(cv2.selectROI)
  5. dedecms二次开发常用代码
  6. C语言 rand和srand
  7. With语句是什么?
  8. 添加Zabbix Agent客户端,并解决报错。
  9. python na不显示 占位_Python学习之路—Python基础(一)
  10. C++ 获取本机登陆过的QQ号码
  11. JAVAWEB 一一 Spirng(AOP面向切面)
  12. 基于Android图书馆借阅系统app毕业设计
  13. 基本图像分类与目标检测网络要点总结
  14. WiFi精灵:开启手机免费上网时代
  15. 【折腾系列—All In One主机】4、 iKuai软路由安装及配置
  16. linux删除文件子最后两行,关于linux:如何使用sed删除文件的最后n行
  17. 阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
  18. 验证电话号码,支持手机座机可加国家代码和区号,座机支持分机
  19. 01-使用EasyExcel读取和写入Excel文件
  20. 发布3天获推荐10w+,视频号内容出现新玩法?

热门文章

  1. hmailserver的反垃圾邮件功能
  2. idea 的Igonre 设置
  3. C/C++游戏项目教程:《雷霆战机》
  4. Wireshark用户使用手册系列完结篇
  5. android降低屏幕分辨率,让游戏更尽兴 手动调低Android手机屏幕分辨率
  6. java监控命令_Java程序各种监控命令和排查方法
  7. 在计算机中汉字能否排序,你不得不知的Excel表格中汉字多种排序方法
  8. 利用高频信号改变钢丝磁性来实现大量存储信息的钢丝录音机
  9. 显卡属于计算机主机还是外设,计算机硬件组成及作用有哪些
  10. TCP的MTU探测功能