国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Qt的跨平臺多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)

2015-05-08 00:54滕志軍徐艷偉
關(guān)鍵詞:跨平臺音視頻解碼

滕志軍,徐艷偉

(東北電力大學(xué)信息工程學(xué)院,吉林 吉林 132012)

基于Qt的跨平臺多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)

滕志軍,徐艷偉

(東北電力大學(xué)信息工程學(xué)院,吉林 吉林 132012)

基于Qt Creator圖形界面開發(fā)環(huán)境,采用以音頻時(shí)間戳為基準(zhǔn)的音視頻同步播放方案,并利用FFMPEG+SDL解碼播放視頻,設(shè)計(jì)了一種跨平臺的嵌入式多媒體播放器.經(jīng)實(shí)驗(yàn)證明,該播放器能夠很好地支持多種格式的媒體文件播放,系統(tǒng)性能穩(wěn)定,與當(dāng)前流行的播放器相比較,在軟件啟動(dòng)時(shí)間、CPU占用率、內(nèi)存占用空間、流暢度以及音視頻同步效果等方面均具有明顯的優(yōu)勢,是一款高性價(jià)比的跨平臺多媒體播放終端.

Qt;跨平臺播放器;FFMPEG解碼;同步播放

伴隨著當(dāng)今社會、經(jīng)濟(jì)、科技的快速發(fā)展,計(jì)算機(jī)技術(shù)和多媒體技術(shù)不斷革新,人們對于知識、新鮮事物的獲取途徑也越來越多樣化.視頻利用其自身所具有的直觀、生動(dòng)的優(yōu)勢被人們所廣泛使用.功能多樣化是現(xiàn)代嵌入式終端設(shè)備的優(yōu)勢特點(diǎn)之一,而視頻播放作為其中一種最具代表性的功能特性被廣泛用于智能設(shè)備終端并成功應(yīng)用于各個(gè)領(lǐng)域,如休閑娛樂、文體辦公、醫(yī)療保健、智能監(jiān)控等.

當(dāng)前,嵌入式系統(tǒng)正處在一個(gè)飛速發(fā)展和激烈競爭的時(shí)代,終端多樣化為整個(gè)嵌入產(chǎn)業(yè)的發(fā)展提供了更加廣闊的發(fā)展空間.當(dāng)然在智能設(shè)備終端領(lǐng)域機(jī)遇與挑戰(zhàn)并存,常見的智能手機(jī)、平板電腦等設(shè)備升級換代速度較快,新產(chǎn)品與舊產(chǎn)品在軟硬件和平臺的標(biāo)準(zhǔn)規(guī)格等方面有較大差異,比如Android平臺不同設(shè)備廠家生產(chǎn)的設(shè)備硬件差異巨大,即使同一廠家生產(chǎn)的設(shè)備其高端機(jī)與低端機(jī)在硬件方面也有較大差異,且兼容軟件版本各異.被微軟收購的諾基亞公司生產(chǎn)的智能手機(jī)的不同硬件規(guī)格的設(shè)備分別使用了Symbian,MeeGo和Windows Phone等軟件平臺,因此如果能開發(fā)一款可以同時(shí)跨多個(gè)平臺的終端軟件,將節(jié)約巨大的開發(fā)成本和開發(fā)時(shí)間[1-2].

本文基于Qt Creator圖形界面開發(fā)環(huán)境,對多媒體播放器進(jìn)行了開發(fā)研究.主要面向PC以及Android,iOS和Symbian智能手機(jī)或平板電腦,支持Windows和Linux操作系統(tǒng)以及大部分Android,iOS和Symbian操作系統(tǒng).重點(diǎn)研究了跨平臺多媒體播放器開發(fā)中的關(guān)鍵技術(shù)(FFMPEG的解碼以及音頻和視頻的同步播放技術(shù)),并據(jù)此開發(fā)出高性價(jià)比的跨平臺多媒體播放終端(Cross-platform multimedia player,簡稱CPMPlayer).

1 Qt平臺簡介

Qt[3]是由諾基亞公司開發(fā)的一款強(qiáng)大的C++圖形用戶界面應(yīng)用程序框架開發(fā)平臺.它可以為開發(fā)者提供完整建立藝術(shù)級的圖形用戶界面所需的功能.Qt是覆蓋移動(dòng)系統(tǒng)平臺最廣的跨平臺開發(fā)框架,具有廣泛的適應(yīng)性和良好的可移植性,同樣的代碼只需在不同平臺系統(tǒng)環(huán)境下編譯,可實(shí)現(xiàn)應(yīng)用程序?qū)Χ鄠€(gè)平臺的兼容.Qt支持多種移動(dòng)終端平臺,包括Symbian,Ubuntu,BlackBerry,MeeGo,Android和iOS.不僅如此,Qt還支持多種桌面開發(fā)系統(tǒng)和嵌入式開發(fā),包括Windows的大部分版本及Unix/X11-Linux,Sun Solaris,HP-UX,Compaq Tru64 UNIX,IBM AIX,SGIIRIX和X11平臺.

Qt能在桌面與嵌入式平臺上開發(fā)先進(jìn)的GUI應(yīng)用程序,實(shí)現(xiàn)所有需要的功能.Qt與OpenGL緊密集成完美支持3D圖形并支持創(chuàng)建應(yīng)用程序用戶界面,其跨平臺多線程功能簡化了并行編程,利用信號與槽機(jī)制[4]實(shí)現(xiàn)跨線程類型安全的對象間通信.Qt支持所有重要的數(shù)據(jù)驅(qū)動(dòng),可以無縫鏈接數(shù)據(jù)庫與Qt應(yīng)用程序.

Qt Creator是一個(gè)全新的、完整的、輕量級的跨平臺Qt集成開發(fā)環(huán)境,確保首次接觸Qt框架的開發(fā)人員能迅速上手和操作.Qt Creator包含一個(gè)高級的C++代碼編輯器、上下文感知幫助系統(tǒng)、可視化調(diào)試器、源代碼管理、項(xiàng)目和構(gòu)建管理工具用于開發(fā)和測試基于Qt的應(yīng)用程序.

2 系統(tǒng)總體設(shè)計(jì)框架

基于Qt的跨平臺多媒體播放器系統(tǒng)的總體設(shè)計(jì)框架如圖1所示.用戶通過由Qt Creator開發(fā)的圖形客戶端打開存放有媒體源的文件夾,系統(tǒng)會自動(dòng)搜索顯示相應(yīng)的媒體文件信息,F(xiàn)FMPEG對媒體文件進(jìn)行解碼并由SDL輔助視頻文件顯示到客戶端上.整個(gè)系統(tǒng)可以流暢播放MP3,WMA和WAV等格式的音頻文件,以及AVI,MP4,F(xiàn)LV和RMVB等格式的視頻文件,并且具有快進(jìn)、快退、暫停、播放列表等功能,支持歷史記錄播放.系統(tǒng)相比其他播放器具有占用內(nèi)存小、反應(yīng)速度快、播放效果好等優(yōu)點(diǎn).

圖1 系統(tǒng)結(jié)構(gòu)原理

3 基于FFMPEG和SDL的音視頻解碼播放

傳統(tǒng)的多媒體文件解碼方式有Any Chat,GSTREAMER,F(xiàn)FMPEG,F(xiàn)FDSHOW,VFW和DIRECTSHOW等,由于FFMPEG的功能強(qiáng)大和編解碼速度較高,目前得到了普遍的應(yīng)用[5].本文采用FFMPEG來實(shí)現(xiàn)音視頻的解碼,同時(shí)為了簡化音視頻處理的難度,采用SDL優(yōu)化媒體文件的顯示播放效果.

3.1 FFMPEG解碼流程

FFMPEG是在Linux下開發(fā)可用來采集和轉(zhuǎn)換數(shù)字音視頻并將其轉(zhuǎn)換為流暢的自由軟件.它允許在包括Windows和Mac OS X在內(nèi)的大多數(shù)操作系統(tǒng)中編譯.包含libavcodec音頻和視頻解碼器庫以及l(fā)ibavformat音頻與視頻格式轉(zhuǎn)換庫[6].為了縮小執(zhí)行文件本身的體積以及節(jié)省系統(tǒng)資源,本文設(shè)計(jì)選擇在Windows下對FFMPEG采用動(dòng)態(tài)編譯.

媒體文件的解碼流程如圖2所示,F(xiàn)FMPEG主要有編解碼模塊、混合器模塊和內(nèi)存操作模塊.編解碼模塊主要是encode和decode,用于音視頻的編碼和解碼,存放在libavcodec子目錄中;混合器模塊主要是muxer和demuxer,用于分離與合并音、視頻,存放在libavformat目錄中[7];內(nèi)存操作主要是修改libavutil目錄中的mem.h和mem.c文件,目的是標(biāo)記從堆上動(dòng)態(tài)分配的內(nèi)存塊的地址以及這些內(nèi)存的釋放情況,避免內(nèi)存泄漏的發(fā)生.FFMPEG利用extradata/extradata_size緩沖器存放解碼器可能會用到額外信息,在av_read_frame中填充.解碼基本流程大體可分以下幾步:

(1) 注冊encode/decode和muxer/demuxer容器.函數(shù)av_register_all(void)把獲取的FFMPEG支持的編碼器、解碼器以及混合器的相關(guān)信息以鏈?zhǔn)浇Y(jié)構(gòu)存放在內(nèi)存中.

(2) 打開視頻文件.函數(shù)av_open_input_file()打開文件、偵測容器文件格式.

(3) 獲取視頻屬性信息.首先利用函數(shù)av_find_stream_info()從文件中獲取流(stream)信息并通過av_read_frame()不停地從碼流中提取幀數(shù)據(jù)保存在容器中,找到codec_type_video類,進(jìn)而根據(jù)av_find_decoder()函數(shù)查找與其對應(yīng)的編解碼器.

(4) 分配圖像緩存,獲取圖像.通過avcodec_open函數(shù)打開編解碼器,函數(shù)avcode_alloc_frame()用于申請內(nèi)存空間,通過特定函數(shù) avcodec_decode_video解碼一幀視頻.使用avcodec_close()釋放內(nèi)存和解碼器,避免內(nèi)存泄漏.

(5) 返回到步驟(3),直到解碼完畢.

(6) 關(guān)閉視頻文件

圖2 FFMPEG解碼流程

3.2 SDL實(shí)現(xiàn)音視頻播放

SDL(Simple DirectMedia Layer)是一套基于C語言編寫,采用抽象封裝方式并開放源代碼的跨平臺多媒體開發(fā)庫.SDL提供多種處理圖像和聲音的函數(shù),API設(shè)計(jì)簡單,能很好地在C++等高級語言環(huán)境中使用,是一個(gè)跨平臺圖像顯示庫.目前SDL多用于開發(fā)游戲、模擬器、媒體播放器等多媒體應(yīng)用領(lǐng)域[8].

利用SDL實(shí)現(xiàn)畫面輸出到屏幕.使用SDL_Init()函數(shù)初始化SDL庫;使用SDL_SetVideoMode()函數(shù)創(chuàng)建一個(gè)給定高度和寬度的屏幕,并設(shè)置屏幕的顏色深度.建立一個(gè)AVPicture結(jié)構(gòu)體,設(shè)置它的數(shù)據(jù)指針和行尺寸參數(shù).SDL_AddTimer(delay,sdl_refresh_timer_cb,is)會讓sdl_refresh_timer_cb函數(shù)把視頻播放的各種信息傳遞給回調(diào)函數(shù)sdl_refresh_timer_cb,然后事件監(jiān)聽模塊監(jiān)聽到數(shù)據(jù).通過SDL_LockMutex和SDL_UnlockMutex函數(shù)保證線程協(xié)調(diào)變量的讀寫安全;SDL_CondWait和SDL_CondSignal函數(shù)來阻塞和解除阻塞.

利用SDL實(shí)現(xiàn)音頻輸出.輸出聲音采用函數(shù)SDL_OpenAudio()打開聲音設(shè)備,使用SDL_AudioSpec結(jié)構(gòu)體作為參數(shù),它包含了要輸出的音頻的所有信息.

在Qt Creator中利用下面2條語句獲得畫面框架,并輸出顯示到屏幕上.

QPixmap pixmap=QPixmap::fromImage(image.scaled(ui->label->size(),Qt::KeepAspectRatio));

ui->label->setPixmap(pixmap);

4 實(shí)現(xiàn)音頻與視頻的同步播放

音頻和視頻的同步技術(shù)是多媒體播放系統(tǒng)中一項(xiàng)極為關(guān)鍵的技術(shù),它對客戶體驗(yàn)的好壞具有直接而深刻的影響.同步的目的在于展示媒體信息時(shí),能夠保持媒體與對象之間固有的時(shí)間關(guān)系.通常情況下音視頻的同步分2種情況:一是流內(nèi)同步,其主要任務(wù)是保證音頻流或視頻流單個(gè)媒體流內(nèi)的時(shí)間關(guān)系,以滿足用戶的感知需求;另一種是流間同步,目的就是保證音頻流和視頻流之間的時(shí)間關(guān)系.[9]

4.1 音頻和視頻的同步播放流程

本文采用以音頻播放的時(shí)間為基準(zhǔn)(如圖3所示),即根據(jù)音頻播放的時(shí)間確定當(dāng)前的圖像是否“遲到”.如果發(fā)生了“圖像遲到”,首先要加快數(shù)據(jù)幀的刷新頻率,同時(shí)啟動(dòng)跳幀策略,通知解碼器以適當(dāng)?shù)念l率在解碼后輸出圖像,直至重新恢復(fù)同步;同樣若“圖像早到”,則加倍計(jì)算延遲,直到重新恢復(fù)同步.這樣就實(shí)現(xiàn)了音頻和視頻的同步.

圖3 音視頻同步播放流程

4.2 時(shí)間漂移問題的處理

影響音視頻同步的一個(gè)重要因素就是時(shí)間漂移的問題.為了更好地解決同步過程中產(chǎn)生的時(shí)間漂移,本文對不同情況采取不同的策略:對于固定速率的媒體文件,采取的策略是將視頻的幀率及音頻的比特率置于文件的首部;對于變速率的媒體文件,采取的方案是將視頻的幀率和音頻的比特率等信息嵌入到媒體流的內(nèi)部.

實(shí)驗(yàn)證明,所采取的策略能有效地消除音視頻同步播放過程中產(chǎn)生的時(shí)間漂移所帶來的影響.

4.3 快進(jìn)、快退下的同步播放

眾所周知,用戶在觀看一部媒體文件時(shí),若不能對其進(jìn)行全局搜索是一件非常遺憾的事情.出于這方面的考慮,本文為多媒體播放器的設(shè)計(jì)增加了一些快進(jìn)、快退功能.對多媒體播放器的快進(jìn)、快退等功能的實(shí)現(xiàn)采用一種基于時(shí)間的隨機(jī)訪問方案,即將媒體文件讀寫指針定位到某個(gè)給定的時(shí)間點(diǎn)上,然后調(diào)用av_read_frame就能夠讀取時(shí)間標(biāo)簽,等于給定時(shí)間點(diǎn)的媒體數(shù)據(jù).快進(jìn)、快退功能的實(shí)現(xiàn)有2種方式:一是通過移動(dòng)進(jìn)度條的位置來實(shí)現(xiàn)對媒體文件的搜索定位;另一種方法就是在媒體文件播放中使用左方向鍵和右方向鍵來表示向前和向后一小段.經(jīng)過反復(fù)實(shí)驗(yàn)前進(jìn)、后退一小段設(shè)置為10 s較為合適.

5 軟件測試與運(yùn)行效果

圖4 CPMPlayer播放界面

完成軟件的設(shè)計(jì)調(diào)試后,相比Linux,Andriod,Windows,Symbian和IOS等系統(tǒng)本文選擇具有代表性的Windows平臺進(jìn)行測試運(yùn)行.測試環(huán)境為Win 7操作系統(tǒng)、英特爾Core i5雙核處理器、4GB三星DRR3 1 067 Hz內(nèi)存、Nvidia GeForce 310 MB 1 GB顯卡、ConexantSmartaudio HD聲卡.軟件顯示界面如圖4所示.

為了更直觀地表現(xiàn)出該方案的可行性與高效性,本文選取了幾種現(xiàn)階段較流行的播放器,在軟件啟動(dòng)時(shí)間、CPU占用率、內(nèi)存占用空間、流暢度以及音視頻同步效果等方面進(jìn)行了比對(見表1).通過表1的數(shù)據(jù)可以很直觀看到基于Qt的多媒體播放器(CPMPlayer)在以上幾方面均占有一定的優(yōu)勢.

表1 主流多媒體播放器性能對比

6 結(jié)束語

本文的創(chuàng)新點(diǎn)是系統(tǒng)具有很好的跨平臺性,并提出了基于FFMPEG和SDL的解碼顯示技術(shù)以及高性能的音視頻同步方案.以此設(shè)計(jì)的多媒體播放系統(tǒng)的實(shí)現(xiàn)過程以及核心的代碼對類似平臺具有很好的可重塑性,代碼通過較小的修改并在不同的平臺編譯就可以移植到不同的操作系統(tǒng)和平臺上運(yùn)行.軟件占用內(nèi)存小、運(yùn)行效果好、開發(fā)成本低,能夠很好地滿足用戶需求,具有較高的經(jīng)濟(jì)價(jià)值.

[1] 馬燕,李存,李曉勇,等.基于ARM平臺的多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2006,32(24):221-222,268.

[2] 陸鋼,朱培軍,李慧云,等.智能終端跨平臺應(yīng)用開發(fā)技術(shù)研究[J].電信科學(xué),2012(5):14-17.

[3] JASMIN BLANCHETTE,MARK SUMMERFIELD.C++ GUI Qt 4編程[M].閆鋒欣,譯.北京:電子工業(yè)出版社,2008:5-120.

[4] 劉治國,陳新華.基于Linux和Qt的智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(4):23-26.

[5] 梁發(fā)云,陳志文,王婧,等.基于FFmpeg的立體視頻播放技術(shù)研究[J].電視技術(shù),2013,37(11):27-29+42.

[6] 辛長春,婁小平,呂乃光.基于FFmpeg 的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼[J].電子技術(shù),2013(1):3-5.

[7] 吳張順,張珣.基于FFmpeg 的視頻編碼存儲研究與實(shí)現(xiàn)[J].杭州電子科技大學(xué)學(xué)報(bào),2006,26(3):30-34.

[8] 王園園,高明煜,曾毓.基于SDL庫的嵌入式平臺中文顯示技術(shù)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2009,18(4):194-197.

[9] 魏耀都,謝湘,匡鏡明,等.新的全參考音視頻同步感知質(zhì)量評價(jià)模型[J].通信學(xué)報(bào),2012,33(2):182-190.

(責(zé)任編輯:石紹慶)

Design and implementation of cross-platform multimedia player based on Qt

TENG Zhi-jun,XU Yan-wei

(College of Information Engineering,Northeast Dianli University,Jilin 132012,China)

In this paper,under the development environment of Qt Creator graphical interface,a cross-platform embedded media player is designed by adopting audio and video synchronous playback scheme which is based on audio time stamp and using FFMPEG+SDL decoder to broadcast video.It is proved that the player is well able to support multiple formats of media file,the system performance is stable,compared with the current popular player,it has more obvious advantages in software startup time,CPU usage,memory footprint,fluency,and synchronization of audio and video effects,etc.This is a cross-platform multimedia player terminal with high cost performance.

Qt;cross-platform player;FFMPEG decoder;synchronous playback

1000-1832(2015)04-0059-05

10.16163/j.cnki.22-1123/n.2015.04.013

2014-08-03

國家自然科學(xué)基金資助項(xiàng)目(51277023).

滕志軍(1973—),男,教授,博士,主要從事無線通信技術(shù)研究.

TP 37 [學(xué)科代碼] 520·40

A

猜你喜歡
跨平臺音視頻解碼
《解碼萬噸站》
跨層級網(wǎng)絡(luò)、跨架構(gòu)、跨平臺的數(shù)據(jù)共享交換關(guān)鍵技術(shù)研究與系統(tǒng)建設(shè)
一款游戲怎么掙到全平臺的錢?
Microchip推出首款車載以太網(wǎng)音視頻橋接(AVB)全集成解決方案
解碼eUCP2.0
3KB深圳市一禾音視頻科技有限公司
NAD C368解碼/放大器一體機(jī)
Quad(國都)Vena解碼/放大器一體機(jī)
跨平臺APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
WIFI音視頻信號傳輸?shù)年P(guān)鍵問題探究