• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Android的流媒體播放器的研究與設(shè)計(jì)

    2014-11-20 08:18:50鄭建宏楊小明
    電視技術(shù) 2014年5期
    關(guān)鍵詞:占用率播放器數(shù)據(jù)流

    魏 濤,彭 濤,鄭建宏,楊小明

    (重慶郵電大學(xué)移動(dòng)通信技術(shù)重慶市重點(diǎn)實(shí)驗(yàn)室,重慶400065)

    近年來,隨著移動(dòng)通信技術(shù)的不斷發(fā)展和移動(dòng)終端性能的大幅提升,人們已不再滿足于單純的文本、圖像和聲音文件。多媒體信息因其直觀、信息量大而得到廣泛應(yīng)用。因此,移動(dòng)流媒體成為無線網(wǎng)絡(luò)技術(shù)和多媒體技術(shù)的新的發(fā)展方向,手機(jī)終端上的流媒體應(yīng)用也日益受到人們的青睞。本文主要基于現(xiàn)有Android手機(jī)系統(tǒng)框架提出了一種流媒體播放器設(shè)計(jì)方案,包括播放器總體分層結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)處理流程、控制流程、狀態(tài)機(jī)設(shè)計(jì)和多線程模式設(shè)計(jì)。

    1 流媒體播放器設(shè)計(jì)

    1.1 總體分層設(shè)計(jì)

    播放器在播放本地媒體文件或者網(wǎng)絡(luò)媒體文件時(shí),都有3個(gè)基本階段:獲取媒體數(shù)據(jù)、音視頻數(shù)據(jù)流的解碼和媒體數(shù)據(jù)顯示[1]。根據(jù)這3個(gè)階段,基于分層的思想,設(shè)計(jì)播放器總體結(jié)構(gòu):從下至上依次為數(shù)據(jù)獲取層、數(shù)據(jù)預(yù)處理層、音視頻解碼層和用戶界面層。分層結(jié)構(gòu)設(shè)計(jì)使各模塊獨(dú)立完成任務(wù),降低了模塊之間的耦合性,各模塊可獨(dú)立進(jìn)行設(shè)計(jì)和優(yōu)化,增強(qiáng)了整體可控性。流媒體播放器系統(tǒng)分層結(jié)構(gòu)如圖1所示。

    圖1 流媒體播放器系統(tǒng)結(jié)構(gòu)

    數(shù)據(jù)獲取層主要獲取本地媒體文件、通過網(wǎng)絡(luò)獲取流媒體數(shù)據(jù)和處理攝像頭控制信息。本地文件獲取通過手機(jī)本地存儲(chǔ),流媒體文件則需要播放器的網(wǎng)絡(luò)模塊與無線通信網(wǎng)的交互來獲取。網(wǎng)絡(luò)流媒體文件獲取包括會(huì)話協(xié)商、數(shù)據(jù)接收和數(shù)據(jù)緩存等過程。媒體文件信息協(xié)商過程需要使用RTSP協(xié)議來完成,主要協(xié)商媒體流常規(guī)信息。

    數(shù)據(jù)預(yù)處理層主要對(duì)本地文件和網(wǎng)絡(luò)媒體文件進(jìn)行解封裝,使上層解碼模塊數(shù)據(jù)一致。對(duì)于本地文件,該層完成按照其媒體的格式解封裝,并將解封裝后的數(shù)據(jù)放入上層解碼緩沖區(qū)。對(duì)于網(wǎng)絡(luò)媒體文件,需要去除RTP包頭信息,并將媒體文件數(shù)據(jù)進(jìn)行組幀,然后將數(shù)據(jù)幀傳遞到上層解碼緩沖區(qū)等待解碼。攝像頭的控制信息封裝也在該層完成。

    音視頻解碼層的功能是解碼組件選擇、解碼器選擇和多路媒體流同步處理。音視頻解碼層通過本地文件或者網(wǎng)絡(luò)媒體文件的文件頭中所帶的格式信息,選擇對(duì)應(yīng)的解碼器對(duì)媒體流進(jìn)行解碼[2]。該層由FFmpeg的libavcodec 完成解碼功能[3]。

    用戶界面主要用于提供用戶對(duì)播放的控制,用戶控制信息通過界面與播放器之間的交互接口下發(fā)后進(jìn)行控制。本設(shè)計(jì)采用Android自帶的界面風(fēng)格,主要完成功能按鈕的實(shí)現(xiàn)[4]。

    1.2 數(shù)據(jù)處理流程

    數(shù)據(jù)流處理主要在Android系統(tǒng)驅(qū)動(dòng)層進(jìn)行,底層對(duì)數(shù)據(jù)流進(jìn)行下載、memorycopy、解碼和回放處理。

    如圖2所示,在流媒體播放的數(shù)據(jù)流程中:1)通過無線信道接收數(shù)據(jù);2)將經(jīng)過DSP處理后的數(shù)據(jù)送給ARM,DSP中的DSP_DMA用于高效的數(shù)據(jù)搬移;3)數(shù)據(jù)搬移操作,一般可通過memorycopy或者AXIDMA高速數(shù)據(jù)搬移來完成;4)媒體數(shù)據(jù)在ARM中的處理分為兩種,媒體數(shù)據(jù)軟解碼是媒體數(shù)據(jù)在ARM中通過軟件算法完成解碼,解碼后的數(shù)據(jù)在DDR中就能送給音視頻輸出模塊;媒體數(shù)據(jù)硬解碼是在ARM中僅對(duì)數(shù)據(jù)進(jìn)行簡單處理后送到DDR的環(huán)形緩沖區(qū),DSP音視頻解碼模塊將對(duì)該環(huán)形緩沖區(qū)中的數(shù)據(jù)進(jìn)行解碼;5)將DSP解碼后的數(shù)據(jù)寫回DDR相應(yīng)的緩存中,為音視頻輸出提供數(shù)據(jù);6)音頻輸出通路,解碼生成的PCM數(shù)據(jù)被傳遞到IIS設(shè)備輸出音頻;7)將解碼完成的數(shù)據(jù)取出,傳遞到Image DMA設(shè)備進(jìn)行高速數(shù)據(jù)搬移,然后傳遞到格式轉(zhuǎn)換器進(jìn)行格式轉(zhuǎn)換;8)視頻輸出通路,經(jīng)格式轉(zhuǎn)換的數(shù)據(jù)通過LCD設(shè)備輸出。其中1)、2)、3)中數(shù)據(jù)流是雙向的,因?yàn)槌讼滦械臄?shù)據(jù)流外,還有一部分RTSP協(xié)議數(shù)據(jù)上傳到網(wǎng)絡(luò)服務(wù)器。此外,緩沖區(qū)的設(shè)計(jì)采用動(dòng)態(tài)可配置大小的策略,可根據(jù)具體解碼時(shí)的數(shù)據(jù)流大小來協(xié)調(diào)整個(gè)系統(tǒng)的資源,既高效又避免系統(tǒng)資源的浪費(fèi)。

    圖2 流媒體播放數(shù)據(jù)處理流程

    1.3 控制流程

    控制流程主要是調(diào)用底層DSP提供的接口函數(shù)來完成。如圖3所示,當(dāng)用戶觸發(fā)一個(gè)播放流程時(shí),播放器就開始對(duì)本地文件或者網(wǎng)絡(luò)獲取的數(shù)據(jù)流進(jìn)行解析,將文件的類型和大小傳遞給ARM多媒體驅(qū)動(dòng)層,傳遞的參數(shù)中還包括LCD顯示參數(shù)和音量信息。ARM端接收到播放事件后,調(diào)用dsp_devinit(),播放器進(jìn)入idle狀態(tài),player_create()的作用是創(chuàng)建一個(gè)播放器實(shí)例,player_init()將LCD參數(shù)和音量傳遞給DSP,函數(shù)player_play(PLAYER_HANDLE id,startpts,0)執(zhí)行后表明DSP已進(jìn)入播放階段,該函數(shù)中第2個(gè)參數(shù)指定播放的起始位置(時(shí)間),第3個(gè)參數(shù)表明從文件的開頭來解析文件??刂屏鞒讨?,上層下發(fā)的暫停、恢復(fù)、快進(jìn)/快退、指定點(diǎn)跳轉(zhuǎn)、停止播放和刪除播放實(shí)例分別調(diào)用底層的 player_pause(),player_resume(),player_scan(),player_goto(),player_stop(),player_delete()。

    圖3 流媒體播放控制流程

    此外,網(wǎng)絡(luò)媒體文件的播放在控制流程中還有不同之處。用戶執(zhí)行播放命令后,ARM首先與網(wǎng)絡(luò)建立連接,然后向流媒體服務(wù)器請(qǐng)求數(shù)據(jù)。播放器通過RTP服務(wù)器將媒體數(shù)據(jù)流緩沖到DDR中,之后根據(jù)緩沖區(qū)信息直接讀取數(shù)據(jù)流。為取得良好的控制,網(wǎng)絡(luò)數(shù)據(jù)流下載控制需與播放器的暫停、恢復(fù)和停止等動(dòng)作對(duì)應(yīng)。

    1.4 狀態(tài)轉(zhuǎn)移機(jī)制設(shè)計(jì)

    狀態(tài)轉(zhuǎn)移如圖4所示,當(dāng)用戶通過客戶端軟件向流媒體服務(wù)器發(fā)出請(qǐng)求并成功建立連接后,客戶端便通過網(wǎng)絡(luò)向流媒體服務(wù)器獲取數(shù)據(jù)流,當(dāng)數(shù)據(jù)達(dá)到一定量后,客戶端開始播放。此過程中,播放器通過維護(hù)一個(gè)工作狀態(tài)機(jī)來完成在用戶下發(fā)命令后的狀態(tài)跳轉(zhuǎn)。

    圖4 流媒體播放器狀態(tài)圖

    1.5 多線程模式設(shè)計(jì)

    本播放器采用多線程的實(shí)現(xiàn)模式:開始播放時(shí),系統(tǒng)同時(shí)創(chuàng)建并運(yùn)行控制線程、視頻解碼回放線程、音頻解碼回放線程和網(wǎng)絡(luò)線程??刂菩畔⒑蛿?shù)據(jù)流在各個(gè)線程運(yùn)行過程中的傳遞如圖5所示。

    圖5 多線程實(shí)現(xiàn)模式

    控制線程:控制音視頻解碼回放,主要負(fù)責(zé)接收用戶發(fā)出的命令信息,發(fā)送控制信息給回放線程、網(wǎng)絡(luò)線程,并響應(yīng)用戶發(fā)出的控制命令。視頻解碼回放線程:一方面從數(shù)據(jù)緩沖隊(duì)列中取出視頻數(shù)據(jù),送入解碼模塊進(jìn)行解碼;另一方面在音視頻同步處理的控制下,將解碼生成的數(shù)據(jù)發(fā)送到終端的LCD。音頻解碼回放線程:在系統(tǒng)控制下,每播放完一段音頻數(shù)據(jù)便啟動(dòng)該線程。該線程從數(shù)據(jù)緩沖隊(duì)列中獲取音頻數(shù)據(jù),經(jīng)過音頻解碼器解碼后,將PCM數(shù)據(jù)流放入特定的緩存區(qū)等待播放。網(wǎng)絡(luò)線程:負(fù)責(zé)與服務(wù)器建立連接、接收媒體數(shù)據(jù)流以及向服務(wù)器發(fā)送反饋信息,線程的創(chuàng)建和啟動(dòng)包含連接過程中的監(jiān)聽子線程。

    2 性能測試與結(jié)果分析

    2.1 測試環(huán)境搭建

    流媒體播放器的性能指標(biāo)主要有解碼、CPU負(fù)載和內(nèi)存消耗。播放器CPU負(fù)載和內(nèi)存消耗既影響整個(gè)系統(tǒng)資源的性能,又直接反映在用戶體驗(yàn)上。本播放器的性能通過完成一幀數(shù)據(jù)所消耗的時(shí)間和CPU占用率來體現(xiàn)。

    在嵌入式系統(tǒng)中,配置ARM核主頻為600 MHz以內(nèi)、RAM為256 Mbyte的應(yīng)用平臺(tái),構(gòu)建流媒體播放器并進(jìn)行性能測試。將編譯生成的鏡像文件燒寫到開發(fā)板Flash中,啟動(dòng)開發(fā)板,在PC端安裝adb驅(qū)動(dòng)并使用Android自帶的adb連接到PC端。測試數(shù)據(jù)主要通過Android系統(tǒng)自帶的top等工具和跟蹤信息打印來獲取。

    2.2 測試及結(jié)果分析

    在EDGE/TD-SCDMA網(wǎng)絡(luò)環(huán)境下,以點(diǎn)播一個(gè)網(wǎng)絡(luò)視頻(HVGA)為例進(jìn)行測試。網(wǎng)絡(luò)視頻總長度為90 s,根據(jù)流媒體播放過程將分成6個(gè)階段進(jìn)行測試分析:1)0~20 s,系統(tǒng)主要進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)緩沖,點(diǎn)播開始4 s后播放視頻。該過程中I/O操作頻繁,消耗內(nèi)存大,CPU負(fù)載較高,CPU占用率為27% ~29%;2)21~40 s,正常播放階段,播放器下載數(shù)據(jù)進(jìn)行緩沖,同時(shí)進(jìn)行解碼播放,I/O操作多且CPU計(jì)算量大,CPU占用率保持在30%以內(nèi),波動(dòng)較小,如圖6所示;3)41~49 s,用戶下發(fā)暫停播放命令,播放器停止解碼播放進(jìn)程,數(shù)據(jù)緩存繼續(xù)進(jìn)行,CPU占用率在10%以內(nèi),如圖7所示;4)50~59 s,用戶下發(fā)命令恢復(fù)播放,進(jìn)入正常播放階段,由于前面的數(shù)據(jù)緩沖,I/O操作相對(duì)減少,CPU占用率在27%以內(nèi);5)60~79 s,用戶快進(jìn)/快退,數(shù)據(jù)緩沖量大,I/O操作相對(duì)增加,內(nèi)存消耗變大,CPU占用率在25% ~29%之間;6)80~90 s,恢復(fù)正常播放,直至播放結(jié)束。網(wǎng)絡(luò)下載停止,內(nèi)存釋放,I/O操作急劇減少,CPU占用率在3%以內(nèi)。

    圖6 穩(wěn)定播放時(shí)系統(tǒng)資源消耗情況

    圖7 播放暫停時(shí)系統(tǒng)資源消耗情況(截圖)

    經(jīng)多次測試表明,流媒體播放時(shí),從打開到正常播放保持在10 s以內(nèi),網(wǎng)絡(luò)狀況不佳的情況下,播放緩沖延時(shí)控制在5 s以內(nèi);流媒體播放的媒體文件清晰度達(dá)到HVGA;播放過程中,CPU占用率控制在30%以內(nèi),暫?;蛘咄V共シ艜r(shí),CPU占用率大幅下降。

    3 結(jié)束語

    本文對(duì)流媒體播放器的分層結(jié)構(gòu)和重要處理流程進(jìn)行了設(shè)計(jì),實(shí)現(xiàn)了關(guān)鍵技術(shù)與核心功能模塊。重點(diǎn)在Android平臺(tái)上設(shè)計(jì)了播放器總體分層結(jié)構(gòu)、各層模塊和數(shù)據(jù)處理流程、控制流程,對(duì)播放器的狀態(tài)機(jī)模型和線程實(shí)現(xiàn)模式進(jìn)行了設(shè)計(jì),主要設(shè)計(jì)了播放器的狀態(tài)轉(zhuǎn)移模型,并對(duì)運(yùn)行過程中各個(gè)線程的功能和多線程的實(shí)現(xiàn)模型進(jìn)行了描述。

    本文設(shè)計(jì)的流媒體播放器已經(jīng)在基于Linux 2.6.32內(nèi)核的Android 4.1定制版本上實(shí)現(xiàn),被應(yīng)用于國家重大專項(xiàng)“TD-SCDMA增強(qiáng)型多媒體手機(jī)終端的研發(fā)和產(chǎn)業(yè)化”中,同時(shí)使Android手機(jī)終端具備了強(qiáng)大的軟件解碼和流媒體應(yīng)用功能。

    [1]王震,林小川,周運(yùn)練,等.基于QT4&Linux多媒體播放器系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].貴州大學(xué)學(xué)報(bào):自然科學(xué)版,2009(1):60-64.

    [2] MICHAEL H,ANTHONY J,F(xiàn)AOUZIK,et al.H.264/AVC baseline profile decoder complexity analysis[J].IEEE Trans.Circuits and Systems for Video Technology,2003,13(7):704-716.

    [3]余志龍,王世江.Google Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2009.

    [4]張正政,林耀榮.基于Android系統(tǒng)的影音播放器開發(fā)[J].現(xiàn)代電子技術(shù),2011,34(2):5-8.

    猜你喜歡
    占用率播放器數(shù)據(jù)流
    汽車維修數(shù)據(jù)流基礎(chǔ)(下)
    Walkman誕生40周年 索尼適時(shí)發(fā)布NW-ZX500和NW-A100系列播放器
    降低CE設(shè)備子接口占用率的研究與應(yīng)用
    魅力中國(2019年6期)2019-07-21 07:12:10
    基于STM32的MP3播放器設(shè)計(jì)
    電子制作(2019年9期)2019-05-30 09:41:44
    Moon ACE播放器/放大器一體機(jī)
    一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
    基于數(shù)據(jù)流聚類的多目標(biāo)跟蹤算法
    基于排隊(duì)論的區(qū)域路內(nèi)停車最優(yōu)泊位占用率研究
    播放器背板注塑模具設(shè)計(jì)
    中國塑料(2015年8期)2015-10-14 01:10:55
    北醫(yī)三院 數(shù)據(jù)流疏通就診量
    黄山市| 松潘县| 通辽市| 区。| 西和县| 施甸县| 新郑市| 南华县| 井冈山市| 怀来县| 南郑县| 兰溪市| 兰考县| 运城市| 会泽县| 永昌县| 防城港市| 惠来县| 左贡县| 庄河市| 巫溪县| 武功县| 香河县| 锦州市| 凤城市| 鄱阳县| 彰武县| 隆德县| 嘉荫县| 莱阳市| 合阳县| 营山县| 北海市| 电白县| 蕲春县| 北碚区| 长武县| 遂溪县| 通化市| 延长县| 阿图什市|