- 青島雅思—專家談雅思考試發(fā)展趨勢
- 河南2011上半年自考網(wǎng)上報名入口 點(diǎn)擊進(jìn)入
- 2011年廣東省護(hù)士資格考試報名現(xiàn)場確認(rèn)時間
- 2011上半年樂山五通橋區(qū)會計(jì)從業(yè)考試報名3月10日-4月1
- 哈爾濱香坊區(qū)2011護(hù)士資格考試報名現(xiàn)場確認(rèn)時間
- 2011什邡第一次會計(jì)從業(yè)資格考試報名3月1日-4月15日
- 2011什邡第二次會計(jì)從業(yè)資格考試報名7月1日-9月16日
- 2011年中山市護(hù)士資格考試報名工作的通知
- 長安大學(xué)2011考研成績查詢?nèi)肟?點(diǎn)擊進(jìn)入
- 西華大學(xué)2011考研成績查詢?nèi)肟?點(diǎn)擊進(jìn)入
- 中國地質(zhì)大學(xué)(武漢)2011考研成績3月3日查詢
- 中南民族大學(xué)2011考研成績查詢3月4日開始
- 沈陽建筑大學(xué)2011考研成績查詢?nèi)肟?點(diǎn)擊進(jìn)入
- 沈陽工業(yè)大學(xué)2011考研成績查詢?nèi)肟?點(diǎn)擊進(jìn)入
基于 QT 和 mplayer 的 MP4播放器設(shè)計(jì)
來源:求學(xué)問校網(wǎng) 發(fā)表時間:2011-08-31 瀏覽 701 次
作者:武漢華嵌技術(shù)部
一、環(huán)境搭建
1、開發(fā)環(huán)境
主機(jī)環(huán)境:ubuntu8.04
編譯工具:gcc-4.2.4
界面工具:qt4
2、主機(jī)端安裝 mplayer,將MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz(1 個mp3 音頻解碼庫)拷貝到 linux 系統(tǒng)中,如:/home/linux/mplayer 目錄下。
(1)安裝 libmad-0.15.1b.tar.gz
#tar xvfz libmad-0.15.1b.tar.gz
#cd libmad-0.15.1b
#./configure
#make
#mkdir /lib/lib
#mkdir /lib/include
#cp mad.h /lib/include
#cp .libs/libmad.a /lib/lib
(2)安裝 mplayer
#tar xvfj MPlayer-1.0.rc2.tar.bz2
#cd MPlayer-1.0rc2
#./configure --with-extraincdir=/lib/include
--with-extralibdir=/lib/lib
#make
#make install
此時可以試著播放一下 mp3、avi 等文件了
# mplayer -ac mad 1.mp3
# mplayer -ac mad 2.avi
二、實(shí)現(xiàn)原理
利用mplayer的slave模式來實(shí)現(xiàn)播放器的功效。所謂的 slave 模式,就是 mplayer在運(yùn)行過程中能夠接收用戶的輸入命令行,具體支持哪些命令行,能夠通過 mplayer -input cmdlist 這條命令來得到,在 Mplayer 源碼的 slave.txt 中也有對這些命令有詳細(xì)的講解。Slave 模式下工作的 Mplayer 可以和系統(tǒng)的標(biāo)準(zhǔn)輸入、輸出進(jìn)行信息交互。我們可以用 linux C 編程來完成對 slave 模式工 作的 Mplayer 進(jìn)行控制和信息獲取。
如:
mkfifo(“/tmp/fifo”);
可以使用 popen()來打開 Mplayer
FILE* mp;
mp=popen(“mplyer /home/linux/1.mp3 -quiet –slave –input file=/tmp/fifo,”r”); 可以通過管道/tmp/fifo 給 mplayer 發(fā)送命令,通過 mp 獲取 mplay 的返回數(shù)據(jù) 如:system(“echo \”mute 0\” > /tmp/fifo”);//寫命令
fgets(buf,mp);//讀取 mplay 返回數(shù)據(jù)
而 Qt 給我們提供了更方便的實(shí)現(xiàn)方法。
通過定義一個 QProcess 對象調(diào)用已編譯好的 Mplayer。
QProcess *process = new QProcess();
process->setProcessChannelMode(QProcess::MergedChannels); Process->start(“mplayer –ac mad xxxxx”);
在命令中添加 -slave 和 -quiet 就可以通過命令設(shè)置 Mplayer 實(shí)現(xiàn)相應(yīng)的功能。在mplayer 源碼中的,slave.txt 中對這些命令有
詳細(xì)的講解。
Process->start(“mplayer –slave –quiet –ac mad xxxxx”);
1、暫停功能
通過如下代碼可以設(shè)置 Mplayer 暫停。
process->write(“pause\n”);
執(zhí)行這段代碼的時候如果是播放狀態(tài)就會暫停,暫停狀態(tài)時就會繼續(xù)播放。
2、獲取播放文件的總時間和當(dāng)前播放進(jìn)度
執(zhí)行下面代碼時,Mplayer 將時間輸出在標(biāo)準(zhǔn)輸出顯示。
process->write("get_time_pos\n");
process->write("get_time_length\n");
通過如下代碼即可讀出我們需要的信息:
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
process 有可讀取的信息時,發(fā)出信號,在槽函數(shù) back_message_slots()中讀取信息。
void MPlayer::back_message_slots()
{
while(process->canReadLine())
{
QString message(process->readLine());
//message 即為讀取的信息我們可以根據(jù)需要取我們要的信息如
//文件總時間為:ANS_LENGTH=23.00
//當(dāng)前時間為: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 ** 1\n”);
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 -1\n”); //音量減小
Process->write(“volume +1\n”); //音量增加
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 0\n"); //開啟靜音
process->write("mute 1\n"); //關(guān)閉靜音
6、定位視頻窗口
通過上面的代碼基本功能實(shí)現(xiàn)了,可是播放視頻的時候發(fā)現(xiàn)又彈出一個窗口。并沒有出現(xiàn)在我們的窗口里。 如下代碼即可 時間窗口的定位。
QString command = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + "-wid " + QString::number(widget->winId());
process->start(command);
紅色部分實(shí)現(xiàn)窗口的定位。Widget 是一個 QWidget 對象。通過 winId 可以獲得一 個數(shù)字,-wid 既將視頻輸出定位到widget 窗體部件中。
注意:-wid 參數(shù)只在 X11、directX 和 OpenGL 中適用。
三、制作界面和代碼的實(shí)現(xiàn)
(代碼省略)
四、功能體驗(yàn)
制作好界面和實(shí)現(xiàn)代碼后,來看下自制播放器的播放效果。
一、環(huán)境搭建
1、開發(fā)環(huán)境
主機(jī)環(huán)境:ubuntu8.04
編譯工具:gcc-4.2.4
界面工具:qt4
2、主機(jī)端安裝 mplayer,將MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz(1 個mp3 音頻解碼庫)拷貝到 linux 系統(tǒng)中,如:/home/linux/mplayer 目錄下。
(1)安裝 libmad-0.15.1b.tar.gz
#tar xvfz libmad-0.15.1b.tar.gz
#cd libmad-0.15.1b
#./configure
#make
#mkdir /lib/lib
#mkdir /lib/include
#cp mad.h /lib/include
#cp .libs/libmad.a /lib/lib
(2)安裝 mplayer
#tar xvfj MPlayer-1.0.rc2.tar.bz2
#cd MPlayer-1.0rc2
#./configure --with-extraincdir=/lib/include
--with-extralibdir=/lib/lib
#make
#make install
此時可以試著播放一下 mp3、avi 等文件了
# mplayer -ac mad 1.mp3
# mplayer -ac mad 2.avi
二、實(shí)現(xiàn)原理
利用mplayer的slave模式來實(shí)現(xiàn)播放器的功效。所謂的 slave 模式,就是 mplayer在運(yùn)行過程中能夠接收用戶的輸入命令行,具體支持哪些命令行,能夠通過 mplayer -input cmdlist 這條命令來得到,在 Mplayer 源碼的 slave.txt 中也有對這些命令有詳細(xì)的講解。Slave 模式下工作的 Mplayer 可以和系統(tǒng)的標(biāo)準(zhǔn)輸入、輸出進(jìn)行信息交互。我們可以用 linux C 編程來完成對 slave 模式工 作的 Mplayer 進(jìn)行控制和信息獲取。
如:
mkfifo(“/tmp/fifo”);
可以使用 popen()來打開 Mplayer
FILE* mp;
mp=popen(“mplyer /home/linux/1.mp3 -quiet –slave –input file=/tmp/fifo,”r”); 可以通過管道/tmp/fifo 給 mplayer 發(fā)送命令,通過 mp 獲取 mplay 的返回數(shù)據(jù) 如:system(“echo \”mute 0\” > /tmp/fifo”);//寫命令
fgets(buf,mp);//讀取 mplay 返回數(shù)據(jù)
而 Qt 給我們提供了更方便的實(shí)現(xiàn)方法。
通過定義一個 QProcess 對象調(diào)用已編譯好的 Mplayer。
QProcess *process = new QProcess();
process->setProcessChannelMode(QProcess::MergedChannels); Process->start(“mplayer –ac mad xxxxx”);
在命令中添加 -slave 和 -quiet 就可以通過命令設(shè)置 Mplayer 實(shí)現(xiàn)相應(yīng)的功能。在mplayer 源碼中的,slave.txt 中對這些命令有
詳細(xì)的講解。
Process->start(“mplayer –slave –quiet –ac mad xxxxx”);
1、暫停功能
通過如下代碼可以設(shè)置 Mplayer 暫停。
process->write(“pause\n”);
執(zhí)行這段代碼的時候如果是播放狀態(tài)就會暫停,暫停狀態(tài)時就會繼續(xù)播放。
2、獲取播放文件的總時間和當(dāng)前播放進(jìn)度
執(zhí)行下面代碼時,Mplayer 將時間輸出在標(biāo)準(zhǔn)輸出顯示。
process->write("get_time_pos\n");
process->write("get_time_length\n");
通過如下代碼即可讀出我們需要的信息:
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
process 有可讀取的信息時,發(fā)出信號,在槽函數(shù) back_message_slots()中讀取信息。
void MPlayer::back_message_slots()
{
while(process->canReadLine())
{
QString message(process->readLine());
//message 即為讀取的信息我們可以根據(jù)需要取我們要的信息如
//文件總時間為:ANS_LENGTH=23.00
//當(dāng)前時間為: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 ** 1\n”);
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 -1\n”); //音量減小
Process->write(“volume +1\n”); //音量增加
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 0\n"); //開啟靜音
process->write("mute 1\n"); //關(guān)閉靜音
6、定位視頻窗口
通過上面的代碼基本功能實(shí)現(xiàn)了,可是播放視頻的時候發(fā)現(xiàn)又彈出一個窗口。并沒有出現(xiàn)在我們的窗口里。 如下代碼即可 時間窗口的定位。
QString command = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + "-wid " + QString::number(widget->winId());
process->start(command);
紅色部分實(shí)現(xiàn)窗口的定位。Widget 是一個 QWidget 對象。通過 winId 可以獲得一 個數(shù)字,-wid 既將視頻輸出定位到widget 窗體部件中。
注意:-wid 參數(shù)只在 X11、directX 和 OpenGL 中適用。
三、制作界面和代碼的實(shí)現(xiàn)
(代碼省略)
四、功能體驗(yàn)
制作好界面和實(shí)現(xiàn)代碼后,來看下自制播放器的播放效果。
武漢電腦培訓(xùn)培訓(xùn)相關(guān)新聞
武漢電腦培訓(xùn)相關(guān)課程
- 襄陽室內(nèi)設(shè)計(jì)培訓(xùn)學(xué)校
- 襄陽廣告設(shè)計(jì)培訓(xùn)學(xué)校
- 襄陽辦公文秘培訓(xùn)襄陽辦公應(yīng)用培訓(xùn)
- 襄陽園林景觀設(shè)計(jì)培訓(xùn)學(xué)校
- 襄陽建筑cad培訓(xùn)襄陽室內(nèi)cad培訓(xùn)襄陽家俱cad培訓(xùn)
- 襄陽建筑cad培訓(xùn)室內(nèi)cad培訓(xùn)
- 襄陽機(jī)械cad培訓(xùn)
- 襄陽2020年全國計(jì)算機(jī)等級考試報名和培訓(xùn)
- 襄陽建筑設(shè)計(jì)培訓(xùn)學(xué)校
- 襄陽3dmax培訓(xùn)襄陽cad培訓(xùn)襄陽vray培訓(xùn)襄陽ps培訓(xùn)
- 襄陽網(wǎng)頁設(shè)計(jì)培訓(xùn)襄陽網(wǎng)站制作培訓(xùn)
- 襄陽影視廣告動漫設(shè)計(jì)培訓(xùn)
- 襄陽大眾室內(nèi)設(shè)計(jì)培訓(xùn)高級學(xué)校
- 襄陽家具Cad培訓(xùn)襄陽室內(nèi)Cad培訓(xùn)
武漢電腦培訓(xùn)相關(guān)機(jī)構(gòu)
武漢最新資訊
- 青島雅思—專家談雅思考試發(fā)展趨勢
- 河南2011上半年自考網(wǎng)上報名入口 點(diǎn)…
- 2011年廣東省護(hù)士資格考試報名現(xiàn)場確…
- 2011上半年樂山五通橋區(qū)會計(jì)從業(yè)考試…
- 哈爾濱香坊區(qū)2011護(hù)士資格考試報名現(xiàn)…
- 2011什邡第一次會計(jì)從業(yè)資格考試報名…
- 2011什邡第二次會計(jì)從業(yè)資格考試報名…
- 2011年中山市護(hù)士資格考試報名工作的…
- 長安大學(xué)2011考研成績查詢?nèi)肟?點(diǎn)擊…
- 西華大學(xué)2011考研成績查詢?nèi)肟?點(diǎn)擊…
武漢推薦課程導(dǎo)航
雅思 | 口語 | 日語 | 韓語 | 德語 | 四六級 | 商務(wù)英語 | 平面設(shè)計(jì) | 游戲動漫 | 影視制作 | 室內(nèi)外設(shè)計(jì) | 動畫設(shè)計(jì) | 網(wǎng)頁設(shè)計(jì) | 等級考試軟件工程 | 美容培訓(xùn) | 手機(jī)維修 | 廚師面點(diǎn) | 會計(jì)職稱 | 心理咨詢 | 人力資源