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

系统 1223 0

本文的主角是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);

DIY 多媒体播放:Qt + MPlayer 的故事。 而 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资源,绿色健康,无毒无公害。 资源包下载

欢迎交流。

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论