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

        ?

        基于Symbian平臺的流媒體播放器設(shè)計與實現(xiàn)*

        2010-06-13 11:33:06羅明珊袁夢龍
        微處理機 2010年3期
        關(guān)鍵詞:音頻文件流式播放器

        羅明珊,武 茜,袁夢龍,張 琳

        (北京郵電大學(xué)先進網(wǎng)絡(luò)技術(shù)實驗室,北京100876)

        1 引言

        繼語音通話、短信服務(wù)、數(shù)據(jù)通信之后,音樂無線下載及實時播放正在成為全球手機運營商提供的新興服務(wù)之一,引發(fā)廣泛的關(guān)注。與傳統(tǒng)的基于個人電腦的音樂播放器相比,手機音樂播放器的優(yōu)勢在于其下載和播放方式的方便快捷,可以給用戶帶來輕松舒適的使用體驗。以手機音樂播放器為媒介,運營商可以依靠其自身對移動通信網(wǎng)絡(luò)服務(wù)的強大控制力,為顧客提供更好的服務(wù)。由于移動通信服務(wù)的靈活性和多樣性,使其在增值業(yè)務(wù)方面也有較強的擴展性。

        Symbian S60平臺的MultimediaFramework(MMF)[1]API可以為上層應(yīng)用程序提供多媒體服務(wù),為用戶創(chuàng)建和分發(fā)豐富多彩的音樂應(yīng)用。作為一個多媒體處理單元的插件集,MMF提供了操作終端硬件的通用接口,支持不同的音頻操作,可實現(xiàn)本地回放和流式回放兩種模式,可播放多種音頻格式。

        在現(xiàn)有基于Symbian OS的多媒體播放器的相關(guān)文獻中,討論了基于Symbian平臺的流媒體播放器移動客戶端的設(shè)計原理[2],給出了指導(dǎo)性意見,并在結(jié)構(gòu)、緩沖等方面給出了優(yōu)化建議,在此基礎(chǔ)上提出了用戶界面的設(shè)計方案。但該文獻沒有給出多媒體技術(shù)的具體實現(xiàn)。本文設(shè)計并實現(xiàn)了基于Symbian平臺的多媒體播放器[3],但其僅支持本地播放,并沒涉及到流式播放的相關(guān)技術(shù)。

        MMusic是一款基于MMF架構(gòu),用于播放多種音樂文件的多媒體播放軟件。它不僅實現(xiàn)了音樂文件的本地播放,同時支持流式播放。除此之外,該音樂播放器還支持音樂下載、歌詞下載及播放同步等功能。其界面美觀、操作簡單且具有多種功能。

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

        在設(shè)計系統(tǒng)框架時,首先明確了播放器需要實現(xiàn)的四項基本功能:①支持mp3、wmv、aac等多種格式的本地音頻播放;②支持流式音頻播放;③支持歌曲搜索及下載的功能;④支持歌詞同步的功能。

        MMusic播放器的程序?qū)崿F(xiàn)基于Symbian S60平臺的應(yīng)用程序架構(gòu),采用多視圖框架,根據(jù)不同的功能構(gòu)造不同的視圖。其視圖包括播放界面(主界面)、搜索歌曲界面、音樂媒體庫界面和電臺列表界面。其中播放界面是整個播放器的核心界面,主要負責(zé)音頻媒體的播放,包括本地播放和流式播放。根據(jù)播放模式的不同,動態(tài)選擇相應(yīng)的菜單和播放引擎。本地播放使用CPlayerAdapter引擎。該引擎使用音頻播放類CMdaAudioPlayerUtility類及其相關(guān)的觀察器MMdaAudioPlayerCallback來實現(xiàn)本地音頻播放。流式播放則使用CPluginAdaper引擎來實現(xiàn),它使用了 CMdaAudioOutputStream和 MMda AudioOutputStreamCallback類。

        MMusic音樂播放器按功能可劃分為六個模塊:①UI模塊,負責(zé)各個界面顯示和界面間的切換,并對用戶按鍵進行處理;②本地播放模塊,可以提供本地音頻文件播放及音量控制等服務(wù);③流式播放模塊,實現(xiàn)與服務(wù)器的交互與流式播放;④數(shù)據(jù)下載模塊,負責(zé)音頻數(shù)據(jù)的下載及存儲;⑤歌詞同步模塊,保證音頻播放與歌詞播放的同步;⑥服務(wù)器模塊,提供音樂文件和歌詞等下載資源。不同模塊的關(guān)系如圖1所示。

        圖1 MMusic播放器功能關(guān)系圖

        3 關(guān)鍵技術(shù)的介紹

        3.1 音頻播放

        音頻播放功能可以通過MMF所提供的接口來實現(xiàn)。其中音頻播放類CMdaAudioPlayerUtility類提供本地播放的API,而CMdaAudioOutputStream類則提供流式播放的 API[4]。

        3.1.1 本地播放引擎

        MMusic播放器把對音頻文件的初始化、播放、暫停等操作封裝在本地播放引擎CPlayer-Adapter中。該引擎包含支持音頻回放操作和簡單元數(shù)據(jù)讀取操作的音頻播放類CMdaAudio-PlayerUtility。由于它的所有操作都是異步的,需要一個客戶端來監(jiān)聽音頻播放操作。播放引擎CPlayerAdapter須繼承MMdaAudioPlayerCallback接口類。該接口類提供了兩個方法,MapcInitComplete()和MapcPlayComplete()。本地播放流程如圖2所示。首先通過調(diào)用CMdaAudioPlayerUtility::NewFilePlayerL()函數(shù)構(gòu)造并創(chuàng)建一個音頻播放器的實例。當(dāng)打開及初始化一個音頻采樣的工作結(jié)束后,系統(tǒng)自動調(diào)用MapcInit-Complete()方法,通知客戶端創(chuàng)建實例的結(jié)果。若成功創(chuàng)建,則可調(diào)用 CMdaAudioPlayerUtility::Play()方法來播放音頻文件。當(dāng)播放某段音頻采樣操作完成后,系統(tǒng)再通過MapcPlayComplete()回調(diào)函數(shù)通知客戶端播放已完成。

        3.1.2 流式播放引擎

        對于流式音頻播放,則使用多媒體框架的CM-daAudioOutputStream API。CPluginAdaper為封裝好的流式播放引擎,由它來調(diào)用流媒體播放的相關(guān)接口。本地內(nèi)容播放和流式播放的主要不同在于文件打開方式、初始化方法及對音頻數(shù)據(jù)流的處理方式。

        要實現(xiàn)流式播放,在程序里需要編寫一個實現(xiàn)了MMdaAudioOutputStreamCallback的客戶端類。這個類提供三個回調(diào)函數(shù),向客戶端提示音頻輸出的流式過程結(jié)果,讓程序能處理可能的錯誤。這些回調(diào)函數(shù)是MaoscOpenComplete()、MaoscBufferCopied()及 MaoscPlay-Complete(),它們都必須由CMdaAudioOutputStream類的使用類實現(xiàn)。因此,CPluginAdaper須繼承觀察類MMdaAudioOutputStreamCallback來得到流式播放過程的結(jié)果。

        圖2 本地播放流程圖

        在實現(xiàn)流式播放前,需要與服務(wù)器進行連接,獲得待播放的音頻數(shù)據(jù)流。在MMusic播放器里,使用套接字來實現(xiàn)服務(wù)端與客戶端的通信??蛻舳耸紫刃枰B接到Symbian OS套接字服務(wù)器,然后打開一個套接字并指定TCP作為傳輸協(xié)議。接著從列表文件得到服務(wù)器的IP地址和端口,向服務(wù)器發(fā)送請求。等服務(wù)器作出響應(yīng)后,讀取響應(yīng)的數(shù)據(jù)并進行分析,用來初始化播放引擎。客戶端繼續(xù)對服務(wù)端請求播放的音頻數(shù)據(jù)。

        得到要播放的音頻數(shù)據(jù)流后,則開始流式播放。其播放流程如圖3所示。首先初始化CMdaAudioOutputStream類。初始化完成后,Multimedia框架會調(diào)用MaoscOpenComplete()回調(diào)函數(shù),指出音頻輸出已經(jīng)可用。該框架所給出的參數(shù)是一個出錯值,它指出初始化是否成功。如果成功,則給出 KErrNone。此處可以設(shè)置采樣率和音量等。成功初始化后,則可以在客戶端調(diào)用PlayL()函數(shù)來播放音頻數(shù)據(jù)流。它調(diào)用FillBufferL()函數(shù)把數(shù)據(jù)往緩沖區(qū)填充,并使用CMdaAudioOutputStream::WriteL(const TdesC8&aData)進行播放。其中參數(shù)aData為緩沖區(qū)數(shù)據(jù)。WriteL()是一個異步函數(shù)。當(dāng)復(fù)制了描述符aData中的數(shù)據(jù)到音頻硬件之后,該框架將調(diào)用 MMda AudioOutputStreamCallback::MaoscBufferCopied()回調(diào)方法,通知客戶端應(yīng)用已收到aData并將其復(fù)制到播放流。此時,可以再調(diào)用FillBufferL()函數(shù)繼續(xù)填充緩沖區(qū),從而實現(xiàn)連續(xù)不斷地流播放。

        圖3 流式播放流程圖

        3.2 音頻文件下載及斷點續(xù)傳

        MMusic使用超文本傳輸協(xié)議HTTP來實現(xiàn)音頻文件和歌詞的下載。HTTP是在TCP/IP協(xié)議上實現(xiàn)的應(yīng)用層協(xié)議,用于在互聯(lián)網(wǎng)上傳輸信息。它使用Socket在服務(wù)器和客戶端之間進行數(shù)據(jù)傳輸。在Symbian OS版本中,提供了對HTTP客戶端的API支持。

        使用HTTP進行通信時,客戶端需要建立一個HTTP客戶端會話,在會話上處理與HTTP服務(wù)器的通信。在會話上建立HTTP通信事務(wù),事務(wù)由請求和響應(yīng)組成,在同一個會話上可以建立一個或多個事務(wù)。也可以同時建立多個會話,來實現(xiàn)不同的連接。

        在創(chuàng)建HTTP引擎時,首先創(chuàng)建一個RHTTPSession類的對象,然后調(diào)用該類的Open()方法,打開這個新建立的會話。然后使用RHTTPTransaction類代表HTTP事務(wù)。事務(wù)是在HTTP客戶端會話打開的。打開事務(wù)時,需制定事務(wù)使用的數(shù)據(jù)傳輸方法,GET或POST,同時傳入要打開的URL。服務(wù)端處理完成后,返回響應(yīng)數(shù)據(jù)。HTTP客戶端通過對MHTTP-TransactionCallback的回遞,處理響應(yīng)結(jié)果和接收響應(yīng)數(shù)據(jù)[5]。

        歌曲的下載分兩步來實現(xiàn)。首先把要搜索的歌曲名字用HTTP引擎發(fā)送到服務(wù)器,服務(wù)器返回XML格式的文件給客戶端。該XML文件包含了搜索到的歌曲名字、下載地址、音頻文件格式和大小等信息??蛻舳擞肧ymbian自帶的 XML解析器對文件進行解析,把解析后的歌曲信息存放在數(shù)組里。每個數(shù)組的元素為自定義的結(jié)構(gòu)體,包含歌曲名,下載地址等內(nèi)容。

        解析完畢后,切換到列表界面。列表界面顯示剛下載的XML文件的解析結(jié)果。用戶可以根據(jù)自己的喜好選擇要下載的歌曲。此時,客戶端提取出歌曲下載的地址,用封裝好的HTTP引擎向服務(wù)器發(fā)送下載請求。客戶端首先判斷待下載的文件是否已存在,如果不存在,則使用HTTP引擎普通下載模式下載音頻文件。如果待下載的文件已存在,則獲得現(xiàn)有文件大小,并把它作為參數(shù)傳給HTTP引擎,發(fā)送到服務(wù)器端,實現(xiàn)斷點續(xù)傳。具體代碼如下:

        void CHTTPEngine::CountinueDownloadL(const TDesC8& aUri,TInt aStart){

        TBool iBool=SetupConnectionL();

        if(iBool==1){

        TUriParser8 uri;//分析傳入的URL地址

        uri.Parse(aUri);

        //從HTTP會話的字符串緩沖池中取出GET方法的字符串表示

        RStringF method = iSession.StringPool().StringF(HTTP::EGET,RHTTPSession::GetTable());

        //在HTTP會話上打開一個事務(wù),傳入URL、事務(wù)回調(diào)的引用、數(shù)據(jù)傳輸方法

        iTransaction=iSession.OpenTransactionL(uri,*this,method);

        RHTTPHeaders hdr=iTransaction.Request().GetHeaderCollection();//設(shè)置請求消息的消息頭

        SetHeaderL (hdr, HTTP::EUserAgent,KUserAgent);

        SetHeaderL(hdr,HTTP::EAccept,KAccept);

        TBuf8<100> rangeBuf;

        rangeBuf.Copy(KDataRange);

        rangeBuf.AppendNum(aStart);

        rangeBuf.Append(KTo);

        SetHeaderL(hdr,HTTP::ERange,rangeBuf);//把文件下載的起始位置添加到消息頭,實現(xiàn)斷點續(xù)傳

        iTransaction.SubmitL();//提出請求

        }}

        3.3 歌詞同步

        首先在用戶終端進行本地搜索與正在播放的音樂文件名字相同的歌詞文件。若搜索到符合條件的文件,則對其進行解析。把文件的每一行內(nèi)容作為一個數(shù)組單元存放在數(shù)組里,數(shù)據(jù)的單元包括有播放時間和歌詞內(nèi)容。由CMdaAudioPlayerUtility類的GetPosition()函數(shù)獲得當(dāng)前音頻文件的播放位置,與數(shù)組中記錄的歌詞文件的時間做對比,來實現(xiàn)歌詞同步。若沒有搜索到歌詞文件,則用歌詞下載引擎從服務(wù)器下載并解析。

        4 軟件實現(xiàn)及效果

        根據(jù)播放器的整體架構(gòu)設(shè)計,在Symbian平臺上實現(xiàn)音樂媒體播放器,并在實際的移動通信網(wǎng)絡(luò)中進行了測試。測試環(huán)境是中國移動GPRS/EDGE網(wǎng)絡(luò)。測試手機為Nokia N95,操作系統(tǒng)為V9.2,用戶界面為S60第三版。其ARM主頻11 332MHz,內(nèi)存160MB。在真機上進行測試時,本地音頻文件播放流暢。而播放在線電臺的內(nèi)容時(即流式播放),其效果會受到網(wǎng)絡(luò)狀況的制約,但整體比較流暢。播放器在真機上的效果如圖4所示。其中(a)顯示的是播放器的功能菜單,(b)為本地播放和歌詞同步的效果,(c)顯示流式播放時連接服務(wù)器的狀態(tài),(d)為連接服務(wù)器成功后流式播放的效果,界面上可以顯示當(dāng)前的連接速度、音頻文件的格式、流量等。

        圖4 軟件效果圖

        5 結(jié)束語

        MMusic音樂播放器很好的實現(xiàn)了音頻播放、音樂下載、歌詞同步等功能。在此基礎(chǔ)上,還可以增加一些音頻的效果,使用戶有更好的視聽感受。同時在歌詞同步方面,程序還可以增加調(diào)整歌詞的功能,當(dāng)出現(xiàn)歌詞不同步時,用戶可以根據(jù)實際情況進行調(diào)整。

        [1]Leigh Edwards Richard Barker.Series 60應(yīng)用程序開發(fā)[M].北京:人民郵電出版社,2006.

        [2]夏濤,簡洪波.基于Symbian平臺的移動流媒體客戶端設(shè)計[J].微處理機,2008,29(3):76-78.

        [3]袁靜.基于SymbianOS的移動多媒體軟件平臺的研發(fā)與應(yīng)用[D].四川:電子科技大學(xué),2008.

        [4]侯茂清.Symbian手機應(yīng)用開發(fā)[M].北京:人民郵電出版社,2009.

        [5]Lain Campbell.Symbian OS通信編程[M].北京:人民郵電出版社,2009.

        猜你喜歡
        音頻文件流式播放器
        輻流式二沉池的結(jié)構(gòu)優(yōu)化研究
        Walkman誕生40周年 索尼適時發(fā)布NW-ZX500和NW-A100系列播放器
        基于STM32的MP3播放器設(shè)計
        電子制作(2019年9期)2019-05-30 09:41:44
        Moon ACE播放器/放大器一體機
        基于Android手機的音頻文件取證技術(shù)研究
        微球測速聚類分析的流式液路穩(wěn)定性評估
        播放器背板注塑模具設(shè)計
        中國塑料(2015年8期)2015-10-14 01:10:55
        提取APP中的音頻文件
        電腦愛好者(2015年5期)2015-09-10 07:22:44
        自調(diào)流式噴管型ICD的設(shè)計與數(shù)值驗證
        流式在線直播視頻的采集
        河南科技(2015年8期)2015-03-11 16:23:41
        91短视频在线观看免费| 丰满熟妇乱又伦精品| а√天堂资源官网在线资源| 丰满熟女人妻中文字幕免费| 精品无码AⅤ片| 国产一品二品三品精品久久| 九一免费一区二区三区偷拍视频| 国产大片在线观看91| 亚洲国产精品亚洲一区二区三区| 狠狠综合久久av一区二区| 香蕉久久夜色精品国产2020| 国产在线观看精品一区二区三区| 久久精品国产亚洲av麻豆床戏 | 日韩插啊免费视频在线观看| 四虎成人精品国产一区a| 国产一区二区在线中文字幕| 国产极品粉嫩福利姬萌白酱| 无码精品国产va在线观看| 五月天无码| 草青青在线视频免费观看| 成人中文乱幕日产无线码 | 美女高潮黄又色高清视频免费| 国产a三级久久精品| 国产成人综合久久三区北岛玲| 国产一区二区三区在线大屁股| 免费人妻精品一区二区三区| 精品免费福利视频| 久久老熟女乱色一区二区| www婷婷av久久久影片| 性欧美大战久久久久久久久| 在线你懂| 亚洲97成人在线视频| 欧美乱妇高清无乱码免费| 国内精品久久久久影院一蜜桃| 久久福利资源国产精品999| 在线视频自拍视频激情| 精品国产三级a在线观看不卡| 国产麻传媒精品国产av| 亚洲中文欧美日韩在线人| 少妇太爽高潮在线播放| 久久精品国产只有精品96|