在J2ME中,移動媒體API(MMAPI)是一個可選包,它提供了一個標準的API,可以用來表現和獲得以時間為基礎的媒體。例如聲音軌道和視頻片斷。MMAPI在java社區進程中以JSR-135開發,并且它被設計成靈活的和平臺無關的,它沒有對媒體格式、協議或者在未來不同設備支持的特征作任何假設。MMAPI已經在移動設備上使用,例如,Nokia3650就包含了一個實現。其它支持MMAPI的設備可以在“J2ME設備”中找到。
這篇文章將介紹MMAPI的最新發展:MMAPI1.1中提出的新的安全考慮、MMAPI和MIDP2.0 Media API之間的不同、J2ME無線工具箱(J2ME Wireless Toolkit)對MMAPI的支持和JSR-234,高級多媒體補充(Advance Multimedia Supplement)。如果你正在尋找一個MMAPI的指南和示例代碼,例如為一個音頻/視頻播放器,請參見“J2ME移動媒體API”和“使用MMAPI拍攝照片”。
MMAPI組件總攬
MMAPI有四個主要的組成部分:
l Player用來播放內容。它提供了方法,用來管理播放器的生命周期,和不同的重放特征。
l Manager是媒體的總控制者,它創建播放器。
l DataSource代表一個協議的控制者,它對應用程序開發者通常是不可見的。這個協議管理者讀出媒體并放到播放器中進行播放。
l Control控制Player和重放操作的不同特征。
MMAPI支持的控制操作
MMAPI在javax.microedition.control包中包含了12種控制操作:
l MetaDataControl用來從媒體數據中獲得元數據信息。
l MIDIControl提供對播放器表現和傳輸設備的訪問。
l GUIControl代表一個具有用戶界面組件的控制操作。
l PitchControl升高或降低重放的位置而不改變重放的速度。
l RateControl控制重放的速率。
l TempoControl控制MIDI歌曲的節奏。
l VolumeControl控制音量。
l VideoControl控制可視內容的顯示。
l FramePositioningControl可以對一個視頻幀精確定位。
l RecordControl記錄當前被Player播放的是什么內容。
l StopTimeControl使應用程序可以為一個Player預先指定一個停止時間。
l ToneControl是一個可以播放用戶自定音調序列的接口。
必須明白,并不是所有的MMAPI實現都支持所有的控制操作類型。你可以通過調用System.getPRoperty(String key)得到一個設備所支持的控制類型。這個規范定義如下這些屬性:
l microedition.media.version返回一個代表MMAPI實現版本的字符串。如果當前設備支持MMAPI,返回“
l supports.mixing如果支持混頻則返回true,否則返回false。
l supports.audio.capture如果支持音頻記錄就返回true,否則返回false。
l supports.video.capture如果支持視頻記錄就返回true,否則返回false。
l supports.recording如果支持錄制就返回true,否則返回false。
l audio.encodings返回一個代表所支持的音頻格式的字符串,如果不支持音頻內容則返回“null”。
l video.encodings返回一個代表所支持的視頻格式的字符串,如果不支持視頻內容則返回“null”。
l video.snapshot.encodings返回一個代表所支持的圖像格式的字符串,如果不支持視頻快照則返回“null”。
l streamable.contents返回一個代表所支持的流媒體內容類型的字符串,以MIME語法。
除了被System.getProperty()支持的屬性外,Manager類還提供了幾個有用的靜態方法:
l String[] getSupportedContentTypes(String protocol)傳入一個協議如“http”作為參數,返回這個協議所支持的內容類型。
l String[] getSupportedProtocols(String contentType)傳入一個以MIME語法的內容類型如“video/mpeg”,返回可以用來傳遞這種類型的協議。
MMAPI1.1
MMAPI1.1是MMAPI1.0的延續和更新。它主要修改了文檔問題,增加了一些新的定義,并且修訂了和MIDP2.0安全框架相關聯的文檔。它沒有對類、接口以及方法定義做任何修改。
MMAPI沒有定義它自己的安全框架,但是MMAPI實現從屬于潛在的Profile和Configuration所提供的安全框架。如果調用者缺乏合適的安全許可,一些MMAPI方法被定義拋出一個SecurityException。因此,一個MMAPI實現必須保證:
l 當調用者沒有合適的權限而執行MMAPI實現中的方法時,要拋出SecurityException。
l 當被授予合適的權限后,其中的方法可能會用到。
MMAPI的安全問題涉及到錄制、網絡訪問和本地數據存儲訪問。錄制關系到用戶的私有權;應用程序可能默默的訪問錄制功能,錄制和分發私人會話。另外,安全實踐必須可以在適當的位置訪問遠程和本地資源。為了獲得訪問錄制功能、網絡和本地數據存儲的權限,一個MMAPI實現必須獲得實現制定的合適的權限。
MMAPI和J2ME無線工具箱2.2
J2ME無線工具2.2版本實現JSR-135。隨這個工具箱一起發布的有一個模擬器皮膚,MediaControlSKIN,它主要用于在多媒體的播放和控制。這個模擬器的MMAPI實現支持一下媒體類型。
MIME類型
描述
audio/midi
MIDI文件
audio/sp-midi
可升級的多音MIDI
audio/x-tone-seq
MIDP2.0音調序列
audio/x-wav
WAV PCM取樣音頻
image/gif
FIG
video/mpeg
MPEG視頻
video/vnd.sun.rgb565
視頻記錄
MMAPI MIDlets
隨工具箱發布的還有一些MMAPI的demo。一個特別用戶的demo是Pausing Audio Test,它是mmademo工程的一部分。它展示了一個良好開發的MMAPI MIDlet應該如何運轉。例如,你必須清楚MIDlets可能會被一些事件中止,如一個來電,如圖1所示。當你的MIDlets中止時,它們應該釋放比較重要的設備資源,當MIDlet恢復時,再重新分配或啟動那些資源。當一個MIDlet中止時,任何播放器都應該停止,如果William Tell Overture穿過一個重要的商務電話一直播放,你的用戶并不會感謝你。
圖1
MMAPI和MIDP2.0 Media API的比較
MIDP2.0媒體API是MMAPI一個直系的子集,打算提供給那些資源有限運行MIDP2.0的設備,盡管同樣的子集可能被其他需要聲音支持的J2ME Profile采用。這個API實現了MIDP專家組制定的要求,包括:
l 簡易音頻播放
l 不依賴于任何特定的協議和內容格式
l 支持自定音調
l 支持普通的媒體流控制,如開始、停止、查找等
l 支持媒體類型特定的控制,如聲音
l 支持容量查詢
因為這些要求,MIDP2.0 Media API和MMAPI有以下不同:
l 如果僅僅是視頻,它不包含視頻或圖像特定的控制操作。
l 不支持多個播放器同時使用一個普通時間基同步播放。
l 不支持通過自定義DataSource的方式自定義協議,不包含javax.microedition.media.protocol包。
l 使用Manager的一個簡化版本。
MMAPI和高級多媒體補充(Advanced Multimedia Supplements)的比較
JSR-135引入了音頻和視頻的基礎的播放功能。JSR-234,高級多媒體補充,將會通過為高級多媒體功能定義一個可選包支持最近的硬件更新。在J2ME/CLDC環境中,新的API依賴和增加了MMAPI的特征。提供這個可選包的主要目的是為了更好的支持照相機和收音機,也為了高級音頻處理。在規范中描述的一些能力有:
l 支持特定的照相機控制,如亮度對比、閃光、燈光模式和鏡頭變焦。
l 正確的訪問收音機和其他基于頻道和頻率的媒體源,包括無線電數據系統。
l 高級的音頻處理能力,如均衡器和音頻效果。
l 媒體輸出方式指定,用來選擇音頻是通過喇叭播放還是通過耳機播放。
總結
MMAPI可選包為運行在MIDP設備上的應用程序,提供了一些宜人的功能,在以前這些功能并不可用。它的可擴展架構為以后在移動設備上提供更多的功能創造了機會。這篇文章描述了MMAPI的主要組成部分,討論了在1.1版本中的變化,并且解釋了MMAPI、MIDP2.0 Media API和高級多媒體補充(Advanced Multimedia Supplements)之間的關系。如果你想將MMAPI運用在實際中,請下載J2ME無線工具箱2.2,然后研究mmademo和Audiodemo工程。
查看原文
(出處:http://www.49028c.com)
新聞熱點
疑難解答