在MIDP1.0(JSR 37)并沒有提供對聲音和視頻處理的支持,因此有些廠商就獨立開發了API來彌補這樣的不足。在MIDP2.0中(JSR 118)中提供了對多媒體處理的支持,但是它只是Mobile Media API(JSR 135)的一個子集。本文將主要對MMAPI做整體介紹。
首先我們關注一下MMAPI的特性。
通常在多媒體的處理過程中有兩個重要的環節,一是處理數據傳輸的協議另一個是處理媒體的數據類型。在MMAPI中提供了DataSource和Player來完成這兩步重要的內容。DataSource對數據傳輸協議進行封裝不管它是從哪里過來的,可以是流、文件或者服務器資源等等。Player則負責解碼工作,并傳輸給外設比如顯示屏和揚聲器,MMAPI的入口點是Manager類,通過它我們可以得到Player的實例。請看下圖
通過如下方法我們可以得到一個Player的實例。
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的時候,它處于UNREALIZED的狀態,當Player已經定位了它目標數據后就進入了REALIZED狀態,接下來Player對數據進行緩沖這樣可以確保播放的流暢,這個狀態叫做PREFETCHED。當Player開始播放數據的時候是STARTED狀態。Player對數據流提供了基本的控制,通過如下方法可以實現
Player.realize()
Player.prefetch()
Player.start()
Player.setMediaTime(long time)
同時Player也允許對數據流進行詳盡的控制,并且針對不同的類型提供不同的控制,通過如下方法我們可以獲得Control
Control[] Player.getControls()
Control Player.getControl(String controlType)
MMAPI提供了一些系統屬性供查詢,我們可以使用方法System.getProperty(String key)得到屬性值。關于這些屬性值得說明請參考MMAPI DOC。
supports.mixing
supports.audio.capture
supports.video.capture
supports.recording
audio.encodings
video.encodings
video.snapshot.encodings
通常我們想知道我們的機器是否支持某些特定的數據類型和傳輸協議,但是由于MMAPI規范中并沒有規定這些,因此我們只能在運行時得到這些數據,可以調用Manager的getSupportedContentTypes() 和getSupportedProtocols()。如果Player播放不能解釋的數據或者處理不支持的協議的時候會拋出異常。
總結:MMAPI的設計相當靈活,在使用MMAPI之前,理解他的結構和規范是非常重要的。在后續的文章中我們將講述如何使用MMAPI并提供具體的實例。
(出處:http://www.companysz.com)
|
新聞熱點
疑難解答