程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 使用J2ME MMAPI開發移動多媒體應用技術(2)

使用J2ME MMAPI開發移動多媒體應用技術(2)

編輯:J2ME

我們根據應用實際的情況選擇使用那種版本來創建Player對象。有了一個Player對象以後,接下來要通過這個Player對象提供的方法去控制媒體流。下面我們列出常用的方法:

◆Player.start():重放媒體流
◆Player.stop():停止媒體流
◆Player.setMediaTime(long now):設置媒體時間
◆Player.close():關閉媒體流並釋放資源
◆Player.getState():獲取Player的當前狀態

每個Player對象中都存在著一個狀態變量,用於表示該Player對象的生命周期。當Player第一次被建立時處於UNREALIZED狀態;當為該Player設置了媒體數據的位置後,它處於REALIZED狀態(如Player正在從一個服務器的HTTP連接下載並解釋數據的時或Player在Http請求已經發送到服務器,收到HTTP響應後,而且DataSource准備好接收媒體數據的時);當該Player已經讀到足夠的數據而開始解釋和運算時,處於PREFETCHED狀態;當數據在運算完畢後,該Player的狀態變成了STARTED。我們在使用Player對象的方法對媒體流進行控制時,應注意它們可能影響到Player狀態的改變,可以使用getState函數獲取當前Player的狀態。圖三展示了Player對象的狀態轉換圖。

圖3:狀態轉換圖

四、播放常見媒體的方法

1、播放單音與序列音

如果要播放一個單音一次,可使用:

Manager.playTone(note,duration,volume); 

如果要播放序列音,則必須使用ToneControl。使用一個特別的定位器來創建一個Player對象,獲得ToneControl,設置其命令序列,然後啟動播放器,如:

Player p = Manager.createPlayer(Manger.TONE_DEVICE_LOCATOR);
p.realize();
ToneControl tc = (ToneControl)(player.getControl("ToneControl"));
tc.setSequence(new byte[] {ToneControl.C4,8
ToneControl.C4+2,8});
p.start();

2、播放聲訊和MIDI

聲訊是指如WAV這樣的聲音格式,在這種格式中,數據是各種聲訊樣本的一個流,它代表著該聲訊每一秒鐘的片斷。MIDI則是一系列的命令,用作多樂器的某種“虛擬合成器”。

如要播放一段能夠通過HTTP訪問的聲音文件,請使用:

Player p = Manager.createPlayer("http://something.com/somefile.wav");
p.start();

如要播放一段已經被置於MIDlet的JAR文件中的聲音文件,需要先了解其MIME類型(如“audio/x-wav”),然後,使用:

InputStream is = getClass().getResourceAsStream("/somefile.wav");
Player p = Manager.createPlayer(is,"audio/x-wav");
p.start(); 

如要播放一段置於RMS中的聲音文件,請使用:

RecordStore rs = RecordStore.open("name");
byte[] data = rs.getRecord(id);
ByteArrayInputStream is = new ByteArrayInputStream(data);
Player p = Manager.createPlayer(is,"audio/x-wav");
p.start(); 

3、播放視頻

播放視頻類似於音頻播放。然而,需要告訴視頻播放器在哪裡顯示視頻信號,因此,需要從視頻播放器處得到一個“視頻控件”,然後在Form或Canvas中顯示視頻內容。下面展示一個從Canvas中顯示視頻的例子:

InputStream is = getClass().getResourceAsStream("/somefile.avi");
Player p = Manager.createPlayer(is,"video/avi");
p.realize();
VideoControl vc = (VideoControl)p.getControl("VideoControl);
if( vc != null )
{
vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,cav); //cav為Canvas對象。
vc.setVisible(true);
p.start();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved