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