2008年12月26日星期五

用Qprocess调用外部mplayer.exe

最简单的使用Qprocess调用外部mplayer.exe的方法,以下是一个简单的例子:

void MainWindow::showMplayer() { 
    const QString mplayerPath("D:/Download/MPlayer-1.0rc2/MPlayer-1.0rc2/mplayer.exe"); 
    QStringList args; 
    args << "D:/Documents and Settings/Project/release/test.avi"; 
    QProcess *myProcess = new QProcess; 
    myProcess->start(mplayerPath, args);
}

接下来,比较复杂,我不仅调用外部mplayer.exe的方法,而且还要将播放窗口放到Qt Widget。这时必须使用mplayer 的-wid参数,这可以将mplayer输出流重定向的指定的窗体(这里就是我们所要的Qt Widget)。同时我们也可以设定一些mplayer的参数。注意:QWidget::winId() returns an HWND not an int.所以要使用类似QString::number(reinterpret_cast<qlonglong>(wd->winId()))的语句。还有一点,mplayer的configure里的GUI必须disable,不然也无法将mplayer输出流定向到Qt Widget上。以下是一个简化的例子:

void MainWindow::showMplayer() { 
    QWidget *wd = new QWidget(this);
    const QString mplayerPath("D:/Download/MPlayer-1.0rc2/MPlayer-1.0rc2/mplayer.exe"); 
    QStringList args; 
    args << " -wid" << QString::number(reinterpret_cast<qlonglong>(wd->winId())); 
    args <<" D:/Documents and Settings/Project/release/test.avi"; 
    QProcess *myProcess = new QProcess(this); 
    myProcess->start(mplayerPath,args); 
    wd->show(); 
}

1 条评论:

Unknown 说...

我在Linux下将MPlayer嵌入到Qt中用于播放视频,但是和其他多个媒体信息进行混合播放的时候,有时MPlayer的视频画面会消失,不知道搂主遇到过没有阿,交流一下如何? tonyki@citiz.net