使用J2ME MMAPI開(kāi)發(fā)移動(dòng)多媒體應用技術(shù)
2007/09/14
一、 引言
在當前世面上存在著(zhù)大量的不同媒體格式,并且還有許多新的媒體格式即將被建立。為了存儲和傳輸這些不同的媒體格式,存在著(zhù)了許多不同格式的存儲設備和傳輸協(xié)議,例如大家常使用的媒體存儲設備(如CD、VCD以及DVD),有線(xiàn)傳輸協(xié)議(如UDP、HTTP),無(wú)線(xiàn)傳輸協(xié)議(如WAP)。
為了使移動(dòng)裝置能夠訪(fǎng)問(wèn)這些不同格式的媒體數據,必需為其設計一個(gè)規范化的、強大的和可擴充的應用接口。J2ME中就提供了一套為規范的播放和錄制音頻或視頻接口,即Mobile
Media API (MMAPI)。
二、MMAPI體系結構
一般情況下,可以將媒體處理過(guò)程分解為兩個(gè)過(guò)程:
- 處理媒體數據的傳輸協(xié)議的過(guò)程。
- 處理媒體數據內容的過(guò)程。
1、 處理媒體數據的傳輸協(xié)議的過(guò)程
處理傳輸協(xié)議的過(guò)程是指從數據源(如一個(gè)文件、一個(gè)捕獲裝置或一個(gè)流服務(wù))上讀取媒體數據內容后,將其傳送到媒體數據內容處理的過(guò)程。
MMAPI使用Data Source來(lái)處理媒體數據的傳輸協(xié)議的過(guò)程。一個(gè)Data Source知道如何從它的原始位置讀取媒體數據并傳送給媒體數據處理(Player)。媒體數據可以被保存在不同的位置,從遠程服務(wù)器到資源文件或者RMS數據庫。媒體數據可以從原始位置通過(guò)HTTP,像RTP一樣的流式傳輸協(xié)議,或者其他機制傳輸到媒體數據處理(Player)。圖一展示了Data
Source的工作過(guò)程。
圖一:Data Source工作過(guò)程
javax.microedition.media.protocol.DataSource提供了MMAPI的Data Source的支持。
2、 處理媒體數據內容的過(guò)程
處理媒體數據內容的過(guò)程通常需要對媒體數據進(jìn)行解釋和解碼,并且還需要認別該媒體的輸出設置的類(lèi)型,如是音頻設置或者視頻設置。舉個(gè)例子,當DataSource從某媒體數據源上獲取一MP3媒體數據,并將其傳送給處理媒體數據內容過(guò)程,此過(guò)程首先對這個(gè)MP3媒體數據進(jìn)行解析和解碼,同時(shí)檢測該MP3媒體為音頻數據,打開(kāi)裝置的音頻設備,將解析和解碼后的媒體數據直接傳送到裝置的音頻設備緩沖中,由該音頻設備根據緩沖區中的數據內容產(chǎn)生音頻信號。
MMAPI使用Player來(lái)處理媒體數據內容。一個(gè)Player是javax.microedition.media.Player接口的一個(gè)實(shí)現實(shí)例,它從Data
Source中讀取媒體數據、解析和解碼數據以及識別媒體輸出設備和傳送媒體數據到輸出設備等。Player提供了一套方法去控制媒體的重放和同步。
MMAPI還提供了一個(gè)或多個(gè)Controls來(lái)調整player的行為,可以在player從媒體轉換數據的時(shí)候從一個(gè)player實(shí)例取得并且使用Controls。我們可以通過(guò)Player中提供的一些特殊的Controls訪(fǎng)問(wèn)一些特殊的媒體類(lèi)型。Controls由javax.microedition.media.Control接口實(shí)現。
3、 Manager
J2ME為了實(shí)現對DataSource和Player有效管理,使用了工廠(chǎng)機制,由Manager來(lái)負責創(chuàng )建Player和DataSource。這樣的機制在JAVA中到處可見(jiàn),如JDBC中的DriverManager,這里我就不對這種機制進(jìn)行介紹了。Manager不僅可以從DataSource中創(chuàng )建Player,而且還可以從本地或InputStream中創(chuàng )建Player。圖二展示了MMAPI整體結構圖。
圖二:MMAPI整體結構圖
三、 使用MMAPI
MMAPI提供的類(lèi)和接口都在javax.microedition.media中,在程序中使用MMAPI時(shí),首先應該引用這些包,否則程序無(wú)法編譯。
每個(gè)MMAPI程序都需要創(chuàng )建一個(gè)Player對象,前面我們已經(jīng)介紹過(guò),MMAPI使用Manager的CreatePlayer函數來(lái)創(chuàng )建Player對象,該函數有三個(gè)版本,其格式如下:
第一個(gè)版本實(shí)現通過(guò)URL字符串指定的協(xié)議和數據位置的信息創(chuàng )建一個(gè)Player對象,其中locator的格式如下:
Manager將對createPlayer函數中提供的URL字符串參數進(jìn)行分析,創(chuàng )建一個(gè)Data Source對象,由該對象完成對媒體數據的傳輸工作,并從數據中獲取該媒體的數據內容類(lèi)型,Manager將根據這個(gè)媒體數據類(lèi)型創(chuàng )建相應的Player對象,如果Manager無(wú)法確定DataSource的內容類(lèi)型,它將拋出一個(gè)MediaException異常。
例:創(chuàng )建一個(gè)控制某網(wǎng)站MP3音頻的Player對象。
Player pMP3 = Manager.createPlayer( "http://www.XXX.com/111.mp3");
第二版本實(shí)現通過(guò)已知的DataSource對象創(chuàng )建Player對象。
第三版本實(shí)現通過(guò)InputStream流創(chuàng )建Player對象。
我們根據應用實(shí)際的情況選擇使用那種版本來(lái)創(chuàng )建Player對象。有了一個(gè)Player對象以后,接下來(lái)要通過(guò)這個(gè)Player對象提供的方法去控制媒體流。下面我們列出常用的方法:
- Player.start():重放媒體流。
- Player.stop():停止媒體流。
- Player.setMediaTime(long now):設置媒體時(shí)間。
- Player.close():關(guān)閉媒體流并釋放資源。
- Player.getState():獲取Player的當前狀態(tài)。
每個(gè)Player對象中都存在著(zhù)一個(gè)狀態(tài)變量,用于表示該Player對象的生命周期。當Player第一次被建立時(shí)處于UNREALIZED狀態(tài);當為該Player設置了媒體數據的位置后,它處于REALIZED狀態(tài)(如Player正在從一個(gè)服務(wù)器的HTTP連接下載并解釋數據的時(shí)或Player在Http請求已經(jīng)發(fā)送到服務(wù)器,收到HTTP響應后,而且DataSource準備好接收媒體數據的時(shí));當該Player已經(jīng)讀到足夠的數據而開(kāi)始解釋和運算時(shí),處于PREFETCHED狀態(tài);當數據在運算完畢后,該Player的狀態(tài)變成了STARTED。我們在使用Player對象的方法對媒體流進(jìn)行控制時(shí),應注意它們可能影響到Player狀態(tài)的改變,可以使用getState函數獲取當前Player的狀態(tài)。圖三展示了Player對象的狀態(tài)轉換圖。
圖三:狀態(tài)轉換圖
四、 播放常見(jiàn)媒體的方法
1.播放單音與序列音
如果要播放一個(gè)單音一次,可使用:
Manager.playTone(note,duration,volume);
如果要播放序列音,則必須使用ToneControl。使用一個(gè)特別的定位器來(lái)創(chuàng )建一個(gè) Player對象,獲得ToneControl,設置其命令序列,然后啟動(dòng)播放器,如:
2.播放聲訊和MIDI
聲訊是指如WAV這樣的聲音格式,在這種格式中,數據是各種聲訊樣本的一個(gè)流,它代表著(zhù)該聲訊每一秒鐘的片斷。MIDI則是一系列的命令,用作多樂(lè )器的某種"虛擬合成器"。
如要播放一段能夠通過(guò)HTTP訪(fǎng)問(wèn)的聲音文件,請使用:
Player p = Manager.createPlayer("http://something.com/somefile.wav");
p.start();
如要播放一段已經(jīng)被置于MIDlet的JAR文件中的聲音文件,需要先了解其MIME類(lèi)型(如,"audio/x-wav"),然后,使用:
3.播放視頻
播放視頻類(lèi)似于音頻播放。然而,需要告訴視頻播放器在哪里顯示視頻信號,因此,需要從視頻播放器處得到一個(gè)"視頻控件",然后在Form或Canvas中顯示視頻內容。下面展示一個(gè)從Canvas中顯示視頻的例子:
賽迪網(wǎng)
中國信息化(industry.ccidnet.com)
相關(guān)鏈接:
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩
五原县|
阆中市|
玉山县|
平顺县|
哈尔滨市|
东安县|
泊头市|
乌苏市|
乌恰县|
合作市|
江北区|
南漳县|
弋阳县|
宜兰市|
唐河县|
洞头县|
康定县|
盐山县|
兰考县|
富蕴县|
台湾省|
化德县|
高碑店市|
五指山市|
夏河县|
镇坪县|
浦江县|
陵川县|
三门峡市|
荣成市|
龙川县|
甘孜县|
抚州市|
连城县|
内乡县|
巴彦县|
满城县|
芦溪县|
麦盖提县|
丹东市|
清流县|
http://444
http://444
http://444
http://444
http://444
http://444