我們根據應用實際的情況選擇使用那種版本來創建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();
}