Mobile Media API概述 (轉)

gugu99發表於2007-12-09
Mobile Media API概述 (轉)[@more@]

作者: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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章