DIY 多媒体播放:Qt + MPlayer 的故事。

来源:互联网 发布:js中array有add方法吗 编辑:程序博客网 时间:2024/04/27 20:36

       本文的主角是Linux下的万能播放器:MPlayer

       因为MPlayer是开源的,所以倍受开发者爱戴。下载MPlayer-1.0rc2.tar.bz2到Linux中,依次configure,make,make install后,就可以在linux下使用MPlayer播放视频和音频文件。但是窗体非常难看,模样是继承于系统的。效果如下图:(播放效果不卡的,是录制的效果不好,将就下>_<)

 

     在嵌入式设备中,我们需要自己DIY个皮肤把MPlayer包在里面,来实现自己的播放器。      

     

      先来考虑考虑如何让mplayer更好看,如何制作皮肤。
      有两种思路:

       ✿  一种是把mplayer 解剖,直接修改他里面的代码,这样我们做得界面就能够和mplayer 一体了(当然也能够通过link mplayer 用到的任何的库和.o 文档,把他无缝的集成在程式里面)。

       ✿ 第二种方法就是mplayer 所谓的slave 模式。slave 模式,就是mplayer 在运行过程中能够接收用户的输入命令行,具体支持哪些命令行,能够通过mplayer -input cmdlist 这条命令来得到,Slave 模式下工作的Mplayer可以和系统的标准输入、输出进行信息交互。我们可以用linux C 编程来完成对slave 模式工作的Mplayer 进行控制和信息获取。 如:mkfifo(“/tmp/fifo”,0777);
   

         而 Qt 给我们提供了更方便的实现方法:通过定义一个 QProcess 对象调用已编译好的Mplayer。当然,这也属于第二种:slave模式。

 

         我写的一个简易实例,有那么点DIY的味道,这就是我的目的。

           主要功能:点击播放按钮,播放视频资源。

 

     

 

 

     

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
      ui->setupUi(this);
      playform = new QWidget(this);
      playform->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
      playform->setAttribute(Qt::WA_OpaquePaintEvent);
      playform->move(110,100);
      playform->setMinimumSize(320,240);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QProcess *process = new QProcess(this);

  //  process->start("mplayer –ac mad Unbelivable-23.avi");
     QStringList args;
     args << "-slave";
     args << "-quiet";
     args << "-wid" << QString::number(this->playform->winId());
     args << "Unbelivable-23.avi";
     process->setProcessChannelMode(QProcess::MergedChannels);
     process->start("mplayer",args);
}



 

      当然MPlayer那些强大的功能还没有用到,还有一些基础功能,实现也很方便:

 

暂停功能
process->write(“pause\n”);

获取播放文件的总时间和当前播放进度
process->write("get_time_pos\n");
process->write("get_time_length\n");

快进功能
seek <value> [type]
Seek to some place in the movie.
0 is a relative seek of +/- <value> seconds (default).
1 is a seek to <value> % in the movie.
2 is a seek to an absolute position of <value> seconds.

process->write(“seek ** 1\n”);

音量调节
volume <value> [abs]
Increase/decrease volume or set it to <value> if [abs] is nonzero.

Process->write(“volume -1\n”); //音量减小
Process->write(“volume +1\n”); //音量增加

静音功能
mute [value]
Toggle sound output muting or set it to [value] when [value] >= 0
(1 == on, 0 == off).

process->write("mute 0\n"); //开启静音
process->write("mute 1\n"); //关闭静音

 


 

   详细的MPlayer介绍在这里:详细的MPlayer介绍

   我的这个简易的多媒体播放器实例,必备的资源:MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz 。

   已上传csdn资源,绿色健康,无毒无公害。资源包下载

  

    欢迎交流。

 

原创粉丝点击