<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 基于Symbian 平臺的流媒體播放器設計與實(shí)現

基于Symbian 平臺的流媒體播放器設計與實(shí)現

作者: 時(shí)間:2011-03-10 來(lái)源:網(wǎng)絡(luò ) 收藏

  3. 1. 2 流式播放引擎

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

  要實(shí)現流式播放,在程序里需要編寫(xiě)一個(gè)實(shí)現了MMdaAudioOutputStreamCallback 的客戶(hù)端類(lèi)。

  這個(gè)類(lèi)提供三個(gè)回調函數,向客戶(hù)端提示音頻輸出的流式過(guò)程結果,讓程序能處理可能的錯誤。這些回調函數是MaoscOpenComplete( ) 、MaoscBufferCopied() 及MaoscPlay - Complete ( ) ,它們都必須由CMdaAudioOutputStream 類(lèi)的使用類(lèi)實(shí)現。因此,CPluginAdaper 須繼承觀(guān)察類(lèi)MMdaAudioOutputStreamCallback來(lái)得到流式播放過(guò)程的結果。

本地播放流程圖

圖2 本地播放流程圖

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

  得到要播放的音頻數據流后,則開(kāi)始流式播放。

  其播放流程如圖3 所示。首先初始化CMdaAudioOutputStream類(lèi)。初始化完成后,Multimedia 框架會(huì )調用MaoscOpenComplete( ) 回調函數,指出音頻輸出已經(jīng)可用。該框架所給出的參數是一個(gè)出錯值,它指出初始化是否成功。如果成功,則給出KErrNONe。此處可以設置采樣率和音量等。成功初始化后,則可以在客戶(hù)端調用PlayL( ) 函數來(lái)播放音頻數據流。它調用FillBufferL( ) 函數把數據往緩沖區填充,并使用CMdaAudioOutputStream: : WriteL( const TdesC8&aData) 進(jìn)行播放。其中參數aData 為緩沖區數據。

  WriteL( ) 是一個(gè)異步函數。當復制了描述符aData中的數據到音頻硬件之后,該框架將調用MMdaAudioOutputStreamCallback: : MaoscBufferCopied( ) 回調方法,通知客戶(hù)端應用已收到aData 并將其復制到播放流。此時(shí),可以再調用FillBufferL( ) 函數繼續填充緩沖區,從而實(shí)現連續不斷地流播放。

流式播放流程圖

圖3 流式播放流程圖

  3. 2 音頻文件下載及斷點(diǎn)續傳

  MMusic 使用超文本傳輸協(xié)議HTTP 來(lái)實(shí)現音頻文件和歌詞的下載。HTTP 是在TCP /IP 協(xié)議上實(shí)現的應用層協(xié)議,用于在互聯(lián)網(wǎng)上傳輸信息。它使用Socket 在服務(wù)器和客戶(hù)端之間進(jìn)行數據傳輸。

  在Symbian OS 版本中,提供了對HTTP 客戶(hù)端的API 支持。

  使用HTTP 進(jìn)行通信時(shí),客戶(hù)端需要建立一個(gè)HTTP 客戶(hù)端會(huì )話(huà),在會(huì )話(huà)上處理與HTTP 服務(wù)器的通信。在會(huì )話(huà)上建立HTTP 通信事務(wù),事務(wù)由請求和響應組成,在同一個(gè)會(huì )話(huà)上可以建立一個(gè)或多個(gè)事務(wù)。也可以同時(shí)建立多個(gè)會(huì )話(huà),來(lái)實(shí)現不同的連接。

  在創(chuàng )建HTTP 引擎時(shí),首先創(chuàng )建一個(gè)RHTTPSession類(lèi)的對象,然后調用該類(lèi)的Open( ) 方法,打開(kāi)這個(gè)新建立的會(huì )話(huà)。然后使用RHTTPTransaction類(lèi)代表HTTP 事務(wù)。事務(wù)是在HTTP 客戶(hù)端會(huì )話(huà)打開(kāi)的。打開(kāi)事務(wù)時(shí),需制定事務(wù)使用的數據傳輸方法,GET 或POST,同時(shí)傳入要打開(kāi)的URL。服務(wù)端處理完成后,返回響應數據。HTTP 客戶(hù)端通過(guò)對MHTTP - TransactionCallback 的回遞,處理響應結果和接收響應數據。



關(guān)鍵詞: 數據通信

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>