Mobile Media API概述 (轉)
作者:than Knudsen 編譯:Sean
Mobile Media (MMAPI)為多開發提供了一個強大,可擴充以及簡單的介面。它有一套規範的和錄製audio
或vo的介面。這篇文章是MMAPI概念的一個概觀以及其類和介面使用的一個教程。
Mobile Media API的體系結構
MMAPI基於四個基本概念:
1。一個知道如何去解釋媒體資料。舉個例子,某種型別的player知道如何根據媒體資料產生。另外一個player
知道如何播放一端QuickTime的movie。x.microedition.media.Player介面的實現(implement)既是這裡說的player。
2。你能用一個或多個controls來調整player的行為。你可以在player從媒體轉換資料的時候從一個player例項
取得並且使用controls。比如,你能用一個VolumeControl來調節一個取樣的聲音大小。
Controls是javax.microedition.media.Control介面的實現。詳細的Control子介面在javax.microedition.media.control包中
3。一個data 知道如何從它的原始位置讀取到媒體資料給player。媒體資料可以被儲存在不同的位置,從到
資源或者RMS。媒體資料可以從原始位置透過HTTP,像RTP一樣的流式傳輸,或者其他機制傳輸到player。
javax.microedition.media.protocol.DataSource是MMAPI中所有data source類的抽象父類。
4。最後,manager把每一個部件捆綁起來,並且為API提供了切入點。javax.microedition.media.Manager 類包含了
得到Player或DataSource的靜態方法。
使用MMAPI
你能使用Manager做到的最簡單的事情是用下面的方法播放一段樂音(tone):
public static void playTone(int note,
int duration, int volume) throws MediaException
播放時間按毫秒定義好,音量範圍則從0(無聲)到100(最大聲)。音符用一個數字定義,像MIDI一樣,60代表中音C調,
69則是一個440赫茲的A調。音符的範圍可以從0到127。playTone()方法適合播放一個單一的音調或是很短的模進音。
更長的單聲道模進音,你可以用預設的樂音,它可以播放一全部模進樂音。
MMAPI最迷人的的地方體現在Manager的createPlayer方法上,該方法有如下三個不同的版本:
public static Player createPlayer(String locator)
throws IOException, MediaException
public static Player createPlayer(DataSource source)
throws IOException, MediaException
public static Player createPlayer(InputStream stream, String type)
throws IOException, MediaException
得到一個Player最簡單的方法是使用第一個createPlayer方法,僅僅傳遞一個代表媒體資料的字串就可以了。
舉個例子,你可以指定一個網站上的音訊檔案:
Player p = Manager.createPlayer("server/music.mp3">");
其他createPlayer方法允許你從一個DataSource或一個InputStream流建立Player。如果你考慮使用Player,
這三個方法是真正的三種不同的方式取得media資料。一個InputStream是個最簡單的,僅僅是一個位元組流。而DataSource
就更高階了點,是一個選擇協議去訪問媒體資料的物件。傳遞一個位置字串是個最好的捷徑:MMAPI會搞清楚用何種協議並
為player取得媒體資料。
如何使用Player
一旦你成功建立了一個Player物件,下一步該做些什麼呢?最簡單的行動就是開始用start方法重放。然而,只是為了學到比
更深層次的東西,這有利於幫助理解一個Player的生命週期。這個週期由四個狀態組成。
當一個Player第一次被建立,它的狀態是UNREALIZED。在為這個Player設定了媒體資料的位置以後,它的狀態是REALIZED。
如果Player正在從一個伺服器的HTTP連線並解釋資料的時候,比如Player在Http請求已經傳送到伺服器,收到HTTP
響應後,而且DataSource準備好接收audio資料的時候。下一個狀態是PREFETCHED,獲得該狀態的時機是該player已經讀到
足夠的資料而開始解釋和運算了。最後,當資料在運算完畢後,Player的狀態變成了STARTED.
Player介面提供了狀態轉換的方法,在狀態迴圈中,無論前進還是後退都有描述。其原因是為了提供給應用一個可操作控制。
控制可能會佔用一段時間。舉個例子,你可能要將Player的REALIZED狀態推到PREFETCHED狀態,為了一段聲音可以馬上播放,以響應
的操作。
在java Platform的MMAPI
MMAPI在在java 2 platform中適用於什麼樣的情況呢?答案是幾乎任何地方。儘管當初MMAPI的設計僅僅是基於CLDC,但它可以
在 CLDC和CDC上都可以執行得很好。事實上,MMAPI可以作為輕量選擇用實現到java media 。
可以支援那些型別的Media檔案?
如果你的裝置支援MMAPI的話,那麼這個裝置可以播放什麼型別的媒體資料呢?支援什麼資料傳輸協議?MMAPI並不要求任何指定
的content type或協議,但你能在執行時找出程式支援什麼型別的資料,透過Manager類的getSupportedContentTypes()
方法和getSupportedProtocols()方法。
可能發生的最糟糕的事情是什麼呢?如果你透過Manager給Player一種不支援的資料型別或協議,它會丟擲個exception。
你的程式應該試圖去從這樣的例外中恢復過來,可以顯示些禮貌的資訊提示給使用者。
MIDP 2.0的媒體
MIDP 2.0規範包括了一個MMAPI的子集。它向上相容所有API。MIDP 2.0子集有如下特性:
1。只支援音訊回放(錄製)。不包含video控制介面。
2。多Player不能被同步
3。DataSource類和javax.microedition.media.protocol包的其他類沒有被包括進來;
應用程式不能實現他們自己的協議。
4。Manager類是被簡化的。
MIDP要求支援樂音產生和取樣,WAV音訊播放。
總結
MMAPI為從java應用在移動裝置行執行使用多媒體提供了一套簡潔的,可擴充的和規範的API。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-990028/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Media Session APISessionAPI
- IndexedDB 非同步API概述Index非同步API
- SharePoint REST API - 概述RESTAPI
- Android Media Framework(三)OpenMAX API閱讀與分析AndroidFrameworkAPI
- API 請求中的 VND 和 PRS 的意思(Media Type)API
- java學習(五) —— 常用API類概述JavaAPI
- 轉spring概述Spring
- kubernetes實踐之十九:API概述API
- ORACLE系統概述(轉)Oracle
- 儲存概述_轉摘
- 核心管理概述(轉貼)
- 核心管理概述(轉載)
- 資料探勘概述 (轉)
- 關於 Node.js Stream API 的用法概述Node.jsAPI
- .NET API 概述及主要功能介紹API
- jQuery Mobile圖片輪轉輪播jQuery
- SCSS @mediaCSS
- C++語言概述 (轉)C++
- 資料探勘概述(又) (轉)
- 呼叫中心技術概述 (轉)
- 各種MySQL程式概述(轉)MySql
- 軟體開發公司概述Android指紋APIAndroidAPI
- 給windows media初學者的一點建議 (轉)Windows
- Android視訊開發進階(part3-Android的Media API)AndroidAPI
- HP-UX 系統概述(轉)UX
- 專案管理過程概述 (轉)專案管理
- 物件導向技術概述 (轉)物件
- CSS media queriesCSS
- mac media serverMacServer
- 轉帖:Mobile widget—手機的"門戶"
- SAP BTP 上使用 Mobile Back-End Tools(MBT)進行全棧開發的方法概述全棧
- No MFC,Only API (轉)API
- Unity Networking API文件翻譯(一):Networking概述UnityAPI
- [轉載] 快速學習-Mybatis框架概述MyBatis框架
- Oracle8i系統概述(轉)Oracle
- FreeBSD安裝與配置概述(轉)
- Linux中安全性概述(轉)Linux
- css - @media 查詢CSS