DIY 多媒体播放:QT + MPlayer 的故事。
本文的主角是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资源,绿色健康,无毒无公害。资源包下载
欢迎交流。