自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于QT前端的Mplayer播放器項目之功能體驗

移動開發(fā)
MPlayer是一款開源多媒體播放器,以GNU通用公共許可證發(fā)布。此款軟件可在各主流作業(yè)系統(tǒng)使用,例如Linux和其他類Unix系統(tǒng)、微軟的視窗系統(tǒng)及蘋果電腦的Mac OS X系統(tǒng)。MPlayer是建基于命令行界面,在各作業(yè)系統(tǒng)可選擇安裝不同的圖形界面。

一、項目概述

Mplayer,它支持大量的多媒體文件格式,像常見的音頻文件如mp3/wav/mid,常見的視頻文件如avi/vcd/dvd/rm等等,各種視頻編/解碼方式也是應(yīng)有盡有。

我們項目的目標(biāo)是在liunx下,用QT做一個MPlayer皮膚,能夠?qū)崿F(xiàn)播放器的常見功能,如:播放、停止、快進(jìn)、快退、上/下一曲等。并把程序移植到ARM平臺上。

二、功能體驗

本節(jié)主要目的是讓大家在學(xué)習(xí)具體實現(xiàn)過程前,先體驗下播放器的功能。
 

1、PC端功能體驗

將“項目代碼\工程代碼”目錄下的mplayer.tar.gz拷貝linux系統(tǒng)中(主機(jī)環(huán)境配置好以后,參照第四節(jié)的實現(xiàn)過程)。

  1. #tar xvfz mplayer.tar.gz   
  2. #./mplayer 

2、目標(biāo)平臺功能體驗

(1)將“項目代碼\工程鏡像”文件夾中的zImage、rootfs.cramfs燒寫到目標(biāo)板(或者采用nfs方式)。分區(qū)情況為:

  1. Boot: 0 - 40000   size=0x40000   
  2. Kernel:40000 – 240000 size=0x200000   
  3. Rootfs: 240000 -3740000 size=0x3500000   
  4. setenv root=1f02 init=/linuxrc rootfstype=cramfs console=ttySAC0,115200 display=sam240 
  5. setenv bootcmd setenv bootcmd nand read 30008000 40000 200000 \; go 30008000 

(2)啟動系統(tǒng)后運(yùn)行:

  1. #. ./Qtopia.sh   
  2. #cd mymplayer   
  3. #./mymplayer -qws 

三、實現(xiàn)原理

先來考慮考慮如何為mplayer編寫前端界面的問題。有兩種思路,一種是把mplayer解剖,直接修改他里面的代碼,這樣我們做得界面就能夠和mplayer一體了(當(dāng)然也能夠通過link mplayer用到的任何的庫和.o文檔,把他無縫的集成在程式里面);第二種方法就是mplayer所謂的slave模式。

  1. mplayer '/home/linux/1.mp3' -quiet -slave 

現(xiàn)在來探討一下slave模式:所謂的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)行控制和信息獲取。

如:

  1. mkfifo(“/tmp/fifo”,0777);  
  2. 可以使用popen()來打開Mplayer  
  3. FILE* mp;  
  4. mp=popen(“mplyer /home/linux/1.mp3 -quiet –slave –input file=/tmp/fifo,”r”); 

可以通過管道/tmp/fifo給mplayer發(fā)送命令,通過mp獲取mplay的返回數(shù)據(jù)

如:

  1. system(“echo \”mute 0\” > /tmp/fifo”);//寫命令  
  2. fgets(buf,1000,mp);//讀取mplay返回數(shù)據(jù) 

而Qt給我們提供了更方便的實現(xiàn)方法。

通過定義一個QProcess對象調(diào)用已編譯好的Mplayer。

  1. QProcess *process = new QProcess();   
  2. process->setProcessChannelMode(QProcess::MergedChannels);   
  3. Process->start(“mplayer –ac mad xxxxx”); 

在命令中添加 -slave 和 -quiet就可以通過命令設(shè)置Mplayer實現(xiàn)相應(yīng)的功能。在mplayer源碼中的,slave.txt中對這些命令有詳細(xì)的講解。

  1. Process->start(“mplayer –slave –quiet –ac mad xxxxx”); 

#p#

1、暫停功能

通過如下代碼可以設(shè)置Mplayer暫停。

  1. process->write(“pause ”); 

執(zhí)行這段代碼的時候如果是播放狀態(tài)就會暫停,暫停狀態(tài)時就會繼續(xù)播放。

2、獲取播放文件的總時間和當(dāng)前播放進(jìn)度

執(zhí)行下面代碼時,Mplayer將時間在標(biāo)準(zhǔn)輸出顯示。

  1. process->write("get_time_pos ");   
  2. process->write("get_time_length "); 

通過如下代碼即可讀出我們需要的信息:

  1. connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots())); 

process有可讀取的信息時,發(fā)出信號,在槽函數(shù)back_message_slots()中讀取信息。

  1. void MPlayer::back_message_slots()  
  2. {  
  3. while(process->canReadLine())  
  4. {  
  5. QString message(process->readLine());  
  6. //message即為讀取的信息我們可以根據(jù)需要取我們要的信息如  
  7. //文件總時間為:ANS_LENGTH=23.00  
  8. //當(dāng)前時間為:ANS_TIME_POSITION=23.00  
  9. }  

3、快進(jìn)功能

  1. seek <value> [type]   
  2. Seek to some place in the movie.   
  3. 0 is a relative seek of +/- <value> seconds (default).   
  4. 1 is a seek to <value> % in the movie.   
  5. 2 is a seek to an absolute position of <value> seconds. 

下面代碼即可實現(xiàn)快進(jìn)功能:

  1. process->write(“seek ** 1 ”); 

4、音量調(diào)節(jié)

  1. volume <value> [abs]  
  2. Increase/decrease volume or set it to <value> if [abs] is nonzero. 

下面代碼即可實現(xiàn)快進(jìn)功能:

  1. Process->write(“volume -1 ”);           //音量減小  
  2. Process->write(“volume +1 ”);          //音量增加 

5、靜音功能

  1. mute [value]   
  2. Toggle sound output muting or set it to [value] when [value] >= 0  
  3. (1 == on, 0 == off). 

下面代碼即可實現(xiàn)快進(jìn)功能:

  1. process->write("mute 0 ");         //開啟靜音   
  2. process->write("mute 1 ");         //關(guān)閉靜音 

6、定位視頻窗口

通過上面的代碼基本功能實現(xiàn)了,可是播放視頻的時候發(fā)現(xiàn)又彈出一個窗口。并沒有出現(xiàn)在我們的窗口里。

如下代碼即可時間窗口的定位。

  1. QString common = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + " -wid " + QString::number(widget->winId());  
  2. process->start(common); 

紅色部分實現(xiàn)窗口的定位。Widget是一個QWidget對象。通過winId可以獲得一個數(shù)字,-wid既將視頻輸出定位到widget窗體部件中。

注意:-wid參數(shù)只在X11、directX和OpenGL中適用。

本文章主要介紹了mplayer的基本概念,功能體驗,實現(xiàn)原理,那么下節(jié)將會深入講解實現(xiàn)原理。

【編輯推薦】

解析 QT 靜態(tài)庫和動態(tài)庫

深度解析 QT 編譯安裝方法

用Qt為Symbian開發(fā)應(yīng)用程序

淺談自動化測試工具 QTP腳本的重用

開源軟件是基于JVM 平臺之Qt移植QtJambi

解析Qt 4.3.5 X11 交叉編譯平臺的搭建、移植

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-10 14:06:32

QT mplayer

2011-09-06 11:08:21

QT播放器Mplayer

2011-06-13 09:33:04

2011-06-27 11:23:21

Qt 音樂播放器

2011-06-24 10:21:11

Qt phonon 多媒體

2009-02-17 23:41:43

Mplayer播放器常見問題

2011-06-16 17:54:30

Qt Mplayer

2015-10-19 17:28:00

MPlayer媒體播放器開源

2015-05-21 15:25:42

VLC播放器

2011-06-13 11:24:55

QT MPlayer 移植

2010-10-26 09:00:48

Winamp應(yīng)用

2011-09-06 11:25:08

2023-03-06 16:20:08

視頻播放器VLC

2011-09-06 10:46:19

QT播放器

2013-07-23 17:55:14

酷狗音樂mac

2022-08-16 17:37:06

視頻播放器鴻蒙

2012-04-05 13:19:06

WEBHTML5

2009-07-07 09:11:23

LINUXmplayer

2013-07-22 17:59:14

VMwarevSphere

2022-02-21 06:20:41

工具Windows 11記事本
點贊
收藏

51CTO技術(shù)棧公眾號