转自:http://www.programbbs.com/doc/4573.htm
如果是想在QT之外打开一个mplayer窗口就很容易:
const QString mplayerPath(/"D:/tools/mplayer/mplayer.exe/");
QStringList args;
args<</"2.avi/";
QProcess* myProcess=new QProcess;
myProcess->start(mplayerPath,args);
如果是想在QT的窗口里用mplayer,就像smplayer那像,这可不是件容易的事。
在网上只找到一上法文的例子:http://doc.qtfr.org/post/2007/03/21/Un-conteneur-pour-MPlayer-utilisation-de-QProcess 用QProcess实现的。可用google英文翻译后阅读。
代码在:http://doc.qtfr.org/public/2007/qt_mplayer.tar.gz
我在windows下实验成功。
也可以研究一下smplayer的源码。大体思想是(别人总结的,跟上面的例子一样):
发现mplayer的参数-wid可以把输出流重定向的指定的窗体,通过winId()得到窗体的id即可,但是我不知道视频流或者说外部显示的数据是怎么在Qwidget上呈现的。
这是那个法国人的例子程序,我加了些comment,注意要把2.avi放到release文件夹下,执行可执行程序,而不是编译后点运行:
#include <QApplication>
#include <QProcess>
#include <QVBoxLayout>
#include <QLayoutItem>
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QColor>
#include <QRect>
#include <QLinearGradient>
#include <QSizePolicy>
#include <QPushButton>
#include <QTextEdit>
#include <QSlider>
#include <QCloseEvent>
#include <QTimer>
#ifdef Q_OS_WIN32
const QString mplayerPath(/"D:/tools/mplayer/mplayer.exe/");
#else
const QString mplayerPath(/"/usr/bin/mplayer/");
#endif
const QString movieFile(/"2.avi/");
class PlayerWidget: public QWidget
...{
Q_OBJECT
private:
QPushButton *controller;
QWidget *renderTarget;
QProcess *mplayerProcess; //main thing
bool isPlaying;
QSlider *timeLine;
QTimer *poller;
QTextEdit *log;
public: