新聞中心

        EEPW首頁 > 設計應用 > 基于Symbian平臺的流媒體播放器設計與實現

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

        作者: 時間:2011-05-27 來源:網絡 收藏

          3 關鍵技術的介紹

          3. 1 音頻播放

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

          3. 1. 1 本地播放引擎

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

          3. 1. 2 流式播放引擎

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

          要實現流式播放,在程序里需要編寫一個實現了MMdaAudioOutputStreamCallback 的客戶端類。

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

        本地播放流程圖

        圖2 本地播放流程圖

          在實現流式播放前,需要與服務器進行連接,獲得待播放的音頻數據流。在MMusic 播放器里,使用套接字來實現服務端與客戶端的通信。客戶端首先需要連接到 OS 套接字服務器,然后打開一個套接字并指定TCP 作為傳輸協議。接著從列表文件得到服務器的IP 地址和端口,向服務器發送請求。等服務器作出響應后,讀取響應的數據并進行分析,用來初始化播放引擎。客戶端繼續對服務端請求播放的音頻數據。

          得到要播放的音頻數據流后,則開始流式播放。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 蒙山县| 文昌市| 东城区| 叙永县| 海兴县| 金沙县| 图木舒克市| 杭锦后旗| 平泉县| 文成县| 宁南县| 枝江市| 扎囊县| 黄平县| 西宁市| 宜宾市| 梁平县| 宜阳县| 阳曲县| 高雄市| 重庆市| 定日县| 溧阳市| 土默特右旗| 甘泉县| 江安县| 肇东市| 乌恰县| 光山县| 高平市| 丰顺县| 三河市| 恩平市| 乌拉特前旗| 都匀市| 五大连池市| 林周县| 伊宁县| 宁强县| 重庆市| 雅江县|