Symbian平臺上實現流媒體播放器 - 全文
1 引言
Symbian S60 平臺的Multimedia Framework( MMF) API 可以為上層應用程序提供多媒體服務,為用戶創建和分發豐富多彩的音樂應用。作為一個多媒體處理單元的插件集,MMF 提供了操作終端硬件的通用接口,支持不同的音頻操作,可實現本地回放和流式回放兩種模式,可播放多種音頻格式。
在現有基于Symbian OS 的多媒體播放器的相關文獻中,討論了基于Symbian 平臺的流媒體播放器移動客戶端的設計原理,給出了指導性意見,并在結構、緩沖等方面給出了優化建議,在此基礎上提出了用戶界面的設計方案。但該文獻沒有給出多媒體技術的具體實現。本文設計并實現了基于Symbian 平臺的多媒體播放器,但其僅支持本地播放,并沒涉及到流式播放的相關技術。
MMusic 是一款基于MMF 架構,用于播放多種音樂文件的多媒體播放軟件。它不僅實現了音樂文件的本地播放,同時支持流式播放。除此之外,該音樂播放器還支持音樂下載、歌詞下載及播放同步等功能。其界面美觀、操作簡單且具有多種功能。
2 系統總體框架設計
在設計系統框架時,首先明確了播放器需要實現的四項基本功能: ①支持mp3、wmv、aac 等多種格式的本地音頻播放; ②支持流式音頻播放; ③支持歌曲搜索及下載的功能; ④支持歌詞同步的功能。
MMusic 播放器的程序實現基于Symbian S60 平臺的應用程序架構,采用多視圖框架,根據不同的功能構造不同的視圖。其視圖包括播放界面( 主界面) 、搜索歌曲界面、音樂媒體庫界面和電臺列表界面。其中播放界面是整個播放器的核心界面,主要負責音頻媒體的播放,包括本地播放和流式播放。
根據播放模式的不同,動態選擇相應的菜單和播放引擎。本地播放使用CPlayerAdapter 引擎。該引擎使用音頻播放類CMdaAudioPlayerUTIlity 類及其相關的觀察器MMdaAudioPlayerCallback 來實現本地音頻播放。流式播放則使用CPluginAdaper 引擎來實現,它使用了CMdaAudioOutputSTream 和MMdaAudioOutputStreamCallback 類。
MMusic 音樂播放器按功能可劃分為六個模塊:
?、賃I 模塊,負責各個界面顯示和界面間的切換,并對用戶按鍵進行處理;②本地播放模塊,可以提供本地音頻文件播放及音量控制等服務;③流式播放模塊,實現與服務器的交互與流式播放;④數據下載模塊,負責音頻數據的下載及存儲;⑤歌詞同步模塊,保證音頻播放與歌詞播放的同步;⑥服務器模塊,提供音樂文件和歌詞等下載資源。不同模塊的關系如圖1 所示。
?
圖1 MMusic 播放器功能關系圖
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 播放器里,使用套接字來實現服務端與客戶端的通信??蛻舳耸紫刃枰B接到Symbian OS 套接字服務器,然后打開一個套接字并指定TCP 作為傳輸協議。接著從列表文件得到服務器的IP 地址和端口,向服務器發送請求。等服務器作出響應后,讀取響應的數據并進行分析,用來初始化播放引擎。客戶端繼續對服務端請求播放的音頻數據。
得到要播放的音頻數據流后,則開始流式播放。
其播放流程如圖3 所示。首先初始化CMdaAudioOutputStream類。初始化完成后,Multimedia 框架會調用MaoscOpenComplete( ) 回調函數,指出音頻輸出已經可用。該框架所給出的參數是一個出錯值,它指出初始化是否成功。如果成功,則給出KErrNONe。此處可以設置采樣率和音量等。成功初始化后,則可以在客戶端調用PlayL( ) 函數來播放音頻數據流。它調用FillBufferL( ) 函數把數據往緩沖區填充,并使用CMdaAudioOutputStream: : WriteL( const TdesC8&aData) 進行播放。其中參數aData 為緩沖區數據。
WriteL( ) 是一個異步函數。當復制了描述符aData中的數據到音頻硬件之后,該框架將調用MMdaAudioOutputStreamCallback: : MaoscBufferCopied( ) 回調方法,通知客戶端應用已收到aData 并將其復制到播放流。此時,可以再調用FillBufferL( ) 函數繼續填充緩沖區,從而實現連續不斷地流播放。
?
圖3 流式播放流程圖
3. 2 音頻文件下載及斷點續傳
MMusic 使用超文本傳輸協議HTTP 來實現音頻文件和歌詞的下載。HTTP 是在TCP /IP 協議上實現的應用層協議,用于在互聯網上傳輸信息。它使用Socket 在服務器和客戶端之間進行數據傳輸。
在Symbian OS 版本中,提供了對HTTP 客戶端的API 支持。
使用HTTP 進行通信時,客戶端需要建立一個HTTP 客戶端會話,在會話上處理與HTTP 服務器的通信。在會話上建立HTTP 通信事務,事務由請求和響應組成,在同一個會話上可以建立一個或多個事務。也可以同時建立多個會話,來實現不同的連接。
在創建HTTP 引擎時,首先創建一個RHTTPSession類的對象,然后調用該類的Open( ) 方法,打開這個新建立的會話。然后使用RHTTPTransaction類代表HTTP 事務。事務是在HTTP 客戶端會話打開的。打開事務時,需制定事務使用的數據傳輸方法,GET 或POST,同時傳入要打開的URL。服務端處理完成后,返回響應數據。HTTP 客戶端通過對MHTTP - TransactionCallback 的回遞,處理響應結果和接收響應數據。
歌曲的下載分兩步來實現。首先把要搜索的歌曲名字用HTTP 引擎發送到服務器,服務器返回XML 格式的文件給客戶端。該XML 文件包含了搜索到的歌曲名字、下載地址、音頻文件格式和大小等信息。客戶端用Symbian 自帶的XML 解析器對文件進行解析,把解析后的歌曲信息存放在數組里。
每個數組的元素為自定義的結構體,包含歌曲名,下載地址等內容。
解析完畢后,切換到列表界面。列表界面顯示剛下載的XML 文件的解析結果。用戶可以根據自己的喜好選擇要下載的歌曲。此時,客戶端提取出歌曲下載的地址,用封裝好的HTTP 引擎向服務器發送下載請求??蛻舳耸紫扰袛啻螺d的文件是否已存在,如果不存在,則使用HTTP 引擎普通下載模式下載音頻文件。如果待下載的文件已存在,則獲得現有文件大小,并把它作為參數傳給HTTP 引擎,發送到服務器端,實現斷點續傳。具體代碼如下:
?
?
3. 3 歌詞同步
首先在用戶終端進行本地搜索與正在播放的音樂文件名字相同的歌詞文件。若搜索到符合條件的文件,則對其進行解析。把文件的每一行內容作為一個數組單元存放在數組里,數據的單元包括有播放時間和歌詞內容。由CMdaAudioPlayerUtility 類的GetPosition( ) 函數獲得當前音頻文件的播放位置,與數組中記錄的歌詞文件的時間做對比,來實現歌詞同步。若沒有搜索到歌詞文件,則用歌詞下載引擎從服務器下載并解析。
4 軟件實現及效果
根據播放器的整體架構設計,在Symbian 平臺上實現音樂媒體播放器,并在實際的移動通信網絡中進行了測試。測試環境是中國移動GPRS /EDGE網絡。測試手機為Nokia N95,操作系統為V9. 2,用戶界面為S60 第三版。其ARM 主頻11 332MHz,內存160MB。在真機上進行測試時,本地音頻文件播放流暢。而播放在線電臺的內容時( 即流式播放) ,其效果會受到網絡狀況的制約,但整體比較流暢。
播放器在真機上的效果如圖4 所示。其中( a) 顯示的是播放器的功能菜單,( b) 為本地播放和歌詞同步的效果,( c) 顯示流式播放時連接服務器的狀態,( d) 為連接服務器成功后流式播放的效果,界面上可以顯示當前的連接速度、音頻文件的格式、流量等。
?
( a) 播放器功能菜單( b) 本地播放和歌詞同步的效果( c) 流式播放時連接服務器的狀態( d) 連接服務器成功后流式播放的效果
圖4 軟件效果圖
5 結束語
MMusic 音樂播放器很好的實現了音頻播放、音樂下載、歌詞同步等功能。在此基礎上,還可以增加一些音頻的效果,使用戶有更好的視聽感受。同時在歌詞同步方面,程序還可以增加調整歌詞的功能,當出現歌詞不同步時,用戶可以根據實際情況進行調整。
- 第 1 頁:Symbian平臺上實現流媒體播放器
- 第 2 頁:流式播放引擎
- 第 3 頁:歌曲的下載
- 第 4 頁:軟件實現及效果
本文導航
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
相關閱讀:
- [電子說] 基于FPGA技術HIFI音頻播放器方案 2023-10-23
- [電子說] 基于RTT-LVGL的音樂播放器設計案例 2023-09-18
- [電子說] 使用MC34063設計的mp3播放器充電器 2023-10-06
- [電子說] OpenHarmony創新賽技術賦能,深開鴻專家9月開講 2023-09-13
- [電子說] 基于CW32的MP3播放器設計 2023-09-06
- [電子說] Wowza HTML5視頻播放器--Flowplayer 2023-09-01
- [電子說] EN50332—媒體播放器(含耳機)輸出音量安全規范測試方案 2022-07-21
- [電子說] 藍牙HI-FI Hi-res播放器方案 2021-12-04
( 發表人:小蘭 )