Qt編寫mplayer 前端程序
作者:曹忠明,華清遠(yuǎn)見(jiàn)嵌入式學(xué)院講師。
編寫一個(gè)自己的mplayer前端程序,根據(jù)自己的喜好設(shè)計(jì)界面。是一件很不錯(cuò)的事情。
首先設(shè)計(jì)一個(gè)漂亮的界面,可以通過(guò)designer設(shè)計(jì)。
通過(guò)定義一個(gè)QProcess對(duì)象調(diào)用已編譯好的Mplayer。
QProcess *process = new QProcess();
process->setProcessChannelMode(QProcess::MergedChannels);
Process->start(“mplayer –ac –mad xxxxx”);
在命令中添加 -slave 和 -quiet就可以通過(guò)命令設(shè)置Mplayer實(shí)現(xiàn)相應(yīng)的功能。在mplayer源碼中的,slave.txt中對(duì)這些命令有詳細(xì)的
Process->start(“mplayer –slave –quiet –ac –mad xxxxx”);
1.暫停功能
通過(guò)如下代碼可以設(shè)置Mplayer暫停。
process->write(“pausen”);
執(zhí)行這段代碼的時(shí)候如果是播放狀態(tài)就會(huì)暫停,暫停狀態(tài)時(shí)就會(huì)繼續(xù)播放。
2.獲取播放文件的總時(shí)間和當(dāng)前播放進(jìn)度。
執(zhí)行下面代碼時(shí),Mplayer將時(shí)間在標(biāo)準(zhǔn)輸出顯示。
process->write("get_time_posn");
process->write("get_time_lengthn");
通過(guò)如下代碼即可讀出我們需要的信息:
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
process有可讀取的信息時(shí),發(fā)出信號(hào),在槽函數(shù)back_message_slots()中讀取信息。
void MPlayer::back_message_slots()
{
while(process->canReadLine())
{
QString message(process->readLine());
//message即為讀取的信息我們可以根據(jù)需要取我們要的信息如
//文件總時(shí)間為:ANS_LENGTH=23.00
//當(dāng)前時(shí)間為:ANS_TIME_POSITION=23.00
}
}
3.快進(jì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.
下面代碼即可實(shí)現(xiàn)快進(jìn)功能:
process->write(“seek ** 1n”);
4.音量調(diào)節(jié)
volume <value> [abs]
Increase/decrease volume or set it to <value> if [abs] is nonzero.
下面代碼即可實(shí)現(xiàn)快進(jìn)功能:
Process->write(“volume -1n”); //音量減小
Process->write(“volume +1n”); //音量增加
5.靜音功能
mute [value]
Toggle sound output muting or set it to [value] when [value] >= 0
(1 == on, 0 == off).
下面代碼即可實(shí)現(xiàn)快進(jìn)功能:
process->write("mute 0n"); //開(kāi)啟靜音
process->write("mute 1n"); //關(guān)閉靜音
6.定位視頻窗口
通過(guò)上面的代碼基本功能實(shí)現(xiàn)了,可是播放視頻的時(shí)候發(fā)現(xiàn)又彈出一個(gè)窗口。并沒(méi)有出現(xiàn)在我們的窗口里。
如下代碼即可時(shí)間窗口的定位。
QString common = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + " -wid " + QString::number(widget->winId());
process->start(common);
紅色部分實(shí)現(xiàn)串口的定位。Widget是一個(gè)QWidget對(duì)象。通過(guò)winId可以獲得一個(gè)數(shù)字,-wid既將視頻輸出定位到widget窗體部件中。
注意:-wid參數(shù)只在X11、directX和OpenGL中適用。
下面便是效果圖:
這里只是實(shí)現(xiàn)了一些基本的功能,如果需要的話可以參考Mplayer中文檔添加需要的功能。
“本文由華清遠(yuǎn)見(jiàn)http://www.embedu.org/index.htm提供”
來(lái)源:華清遠(yuǎn)見(jiàn)1次