亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于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)

        近年來(lái),隨著移動(dòng)通信技術(shù)的不斷發(fā)展和移動(dòng)終端性能的大幅提升,人們已不再滿(mǎn)足于單純的文本、圖像和聲音文件。多媒體信息因其直觀(guān)、信息量大而得到廣泛應(yīng)用。因此,移動(dòng)流媒體成為無(wú)線(xiàn)網(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ì)和多線(xiàn)程模式設(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ù)處理層、音視頻解碼層和用戶(hù)界面層。分層結(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ù)獲取層主要獲取本地媒體文件、通過(guò)網(wǎng)絡(luò)獲取流媒體數(shù)據(jù)和處理攝像頭控制信息。本地文件獲取通過(guò)手機(jī)本地存儲(chǔ),流媒體文件則需要播放器的網(wǎng)絡(luò)模塊與無(wú)線(xiàn)通信網(wǎng)的交互來(lái)獲取。網(wǎng)絡(luò)流媒體文件獲取包括會(huì)話(huà)協(xié)商、數(shù)據(jù)接收和數(shù)據(jù)緩存等過(guò)程。媒體文件信息協(xié)商過(guò)程需要使用RTSP協(xié)議來(lái)完成,主要協(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ū)等待解碼。攝像頭的控制信息封裝也在該層完成。

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

        用戶(hù)界面主要用于提供用戶(hù)對(duì)播放的控制,用戶(hù)控制信息通過(guò)界面與播放器之間的交互接口下發(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)通過(guò)無(wú)線(xiàn)信道接收數(shù)據(jù);2)將經(jīng)過(guò)DSP處理后的數(shù)據(jù)送給ARM,DSP中的DSP_DMA用于高效的數(shù)據(jù)搬移;3)數(shù)據(jù)搬移操作,一般可通過(guò)memorycopy或者AXIDMA高速數(shù)據(jù)搬移來(lái)完成;4)媒體數(shù)據(jù)在ARM中的處理分為兩種,媒體數(shù)據(jù)軟解碼是媒體數(shù)據(jù)在ARM中通過(guò)軟件算法完成解碼,解碼后的數(shù)據(jù)在DDR中就能送給音視頻輸出模塊;媒體數(shù)據(jù)硬解碼是在ARM中僅對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理后送到DDR的環(huán)形緩沖區(qū),DSP音視頻解碼模塊將對(duì)該環(huán)形緩沖區(qū)中的數(shù)據(jù)進(jìn)行解碼;5)將DSP解碼后的數(shù)據(jù)寫(xiě)回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ù)通過(guò)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ù)流大小來(lái)協(xié)調(diào)整個(gè)系統(tǒng)的資源,既高效又避免系統(tǒng)資源的浪費(fèi)。

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

        1.3 控制流程

        控制流程主要是調(diào)用底層DSP提供的接口函數(shù)來(lái)完成。如圖3所示,當(dāng)用戶(hù)觸發(fā)一個(gè)播放流程時(shí),播放器就開(kāi)始對(duì)本地文件或者網(wǎng)絡(luò)獲取的數(shù)據(jù)流進(jìn)行解析,將文件的類(lèi)型和大小傳遞給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ù)表明從文件的開(kāi)頭來(lái)解析文件??刂屏鞒讨?,上層下發(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ò)媒體文件的播放在控制流程中還有不同之處。用戶(hù)執(zhí)行播放命令后,ARM首先與網(wǎng)絡(luò)建立連接,然后向流媒體服務(wù)器請(qǐng)求數(shù)據(jù)。播放器通過(guò)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)用戶(hù)通過(guò)客戶(hù)端軟件向流媒體服務(wù)器發(fā)出請(qǐng)求并成功建立連接后,客戶(hù)端便通過(guò)網(wǎng)絡(luò)向流媒體服務(wù)器獲取數(shù)據(jù)流,當(dāng)數(shù)據(jù)達(dá)到一定量后,客戶(hù)端開(kāi)始播放。此過(guò)程中,播放器通過(guò)維護(hù)一個(gè)工作狀態(tài)機(jī)來(lái)完成在用戶(hù)下發(fā)命令后的狀態(tài)跳轉(zhuǎn)。

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

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

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

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

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

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

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

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

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

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

        在EDGE/TD-SCDMA網(wǎng)絡(luò)環(huán)境下,以點(diǎn)播一個(gè)網(wǎng)絡(luò)視頻(HVGA)為例進(jìn)行測(cè)試。網(wǎng)絡(luò)視頻總長(zhǎng)度為90 s,根據(jù)流媒體播放過(guò)程將分成6個(gè)階段進(jìn)行測(cè)試分析:1)0~20 s,系統(tǒng)主要進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)緩沖,點(diǎn)播開(kāi)始4 s后播放視頻。該過(guò)程中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%以?xún)?nèi),波動(dòng)較小,如圖6所示;3)41~49 s,用戶(hù)下發(fā)暫停播放命令,播放器停止解碼播放進(jìn)程,數(shù)據(jù)緩存繼續(xù)進(jìn)行,CPU占用率在10%以?xún)?nèi),如圖7所示;4)50~59 s,用戶(hù)下發(fā)命令恢復(fù)播放,進(jìn)入正常播放階段,由于前面的數(shù)據(jù)緩沖,I/O操作相對(duì)減少,CPU占用率在27%以?xún)?nèi);5)60~79 s,用戶(hù)快進(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%以?xún)?nèi)。

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

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

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

        3 結(jié)束語(yǔ)

        本文對(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ī)模型和線(xiàn)程實(shí)現(xiàn)模式進(jìn)行了設(shè)計(jì),主要設(shè)計(jì)了播放器的狀態(tài)轉(zhuǎn)移模型,并對(duì)運(yùn)行過(guò)程中各個(gè)線(xiàn)程的功能和多線(xiàn)程的實(shí)現(xiàn)模型進(jìn)行了描述。

        本文設(shè)計(jì)的流媒體播放器已經(jīng)在基于Linux 2.6.32內(nèi)核的Android 4.1定制版本上實(shí)現(xiàn),被應(yīng)用于國(guó)家重大專(zhuān)項(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開(kāi)發(fā)范例大全[M].北京:人民郵電出版社,2009.

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

        猜你喜歡
        占用率播放器數(shù)據(jù)流
        汽車(chē)維修數(shù)據(jù)流基礎(chǔ)(下)
        Walkman誕生40周年 索尼適時(shí)發(fā)布NW-ZX500和NW-A100系列播放器
        降低CE設(shè)備子接口占用率的研究與應(yīng)用
        基于STM32的MP3播放器設(shè)計(jì)
        電子制作(2019年9期)2019-05-30 09:41:44
        Moon ACE播放器/放大器一體機(jī)
        一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
        基于數(shù)據(jù)流聚類(lèi)的多目標(biāo)跟蹤算法
        基于排隊(duì)論的區(qū)域路內(nèi)停車(chē)最優(yōu)泊位占用率研究
        播放器背板注塑模具設(shè)計(jì)
        北醫(yī)三院 數(shù)據(jù)流疏通就診量
        久久亚洲AV成人一二三区| 亚洲av日韩一区二区| 国产午夜片无码区在线播放| 小宝极品内射国产在线| 中文字幕国产欧美| 亚洲av人片在线观看调教| 国产婷婷成人久久av免费| 久久久www成人免费毛片| 人人做人人妻人人精| 2020最新国产激情| 护士人妻hd中文字幕| 色777狠狠狠综合| 亚洲国产精品无码久久电影| 国产一区二区三区观看视频| 一区二区三区在线视频观看| 国产三级久久久精品麻豆三级| 亚欧国产女人天堂Av在线播放 | 欧洲人体一区二区三区| 91九色极品探花内射| 性按摩xxxx在线观看| 亚洲国产精品久久久久久久 | 国产精品无需播放器| 女同国产日韩精品在线| 日韩精品专区在线观看| 影音先锋男人站| 一本一本久久久久a久久综合激情| 麻豆国产成人av高清在线| 国产精品久久久久久久久电影网| 又爽又黄又无遮挡的激情视频| 在线国产视频精品视频| 区一区二区三免费观看视频 | 国产精品爆乳在线播放| 国产精品成年人毛片毛片| 疯狂三人交性欧美| 无码一区二区波多野结衣播放搜索| 亚洲人成无码网站十八禁| 日本一区二区三区视频免费在线| 麻豆国产在线精品国偷产拍| 亚洲av日韩av综合aⅴxxx| 亚州中文字幕乱码中文字幕| 国产丝袜美女一区二区三区 |