BlackBerry Java提供的多媒體支持包括MMAPI (JSR 135) 和Plazmic Media Engine。
首先來介紹一下MMAPI,即Player和javax.microedition.media包。它爲媒體資源播放,控制播放,和管理播放狀態提供了一些列方法。
一個Player有五個狀態:UNREALIZED, REALIZED, PREFETCHED, STARTED, CLOSED。 設計這些狀態目的是爲消耗時間和資源的操作提供更好的控制。
Player被創建後的初始狀態是UNREALIZED。在這個狀態下,Player實例不知道媒體文件的任何信息,不能播放媒體文件。
Player.realize()方法會把Player的狀體從UNREALIZED變爲REALIZED狀態。這個方法會訪問媒體文件或媒體資源來獲取必要的媒體信息爲播放做準備。
Player.prefetch()方法會把Player的狀態變爲PREFETCHED。在這個狀態下,Player會進一步獲取媒體資源必要信息並裝載部分媒體資源爲播放媒體做好準備。
Player.start()方法會把Player的狀態變爲STARTED,Player將會立即開始播放媒體資源。
Player如果沒有經過realize()和prefetch()是不可能開始播放的。start()方法會間接的呼叫prefetch(0),也就是realize(),在媒體播放開始之前。直接呼叫start()來播放會對媒體播放造成延遲。
當Player播放媒體內容完畢或者Player.stop()方法被叫時, player會從STARTED狀態 變爲PREFETECHED狀態。在PREFECTED狀態的Player可以隨時再次播放或循環播放。
在除CLOSED狀態以外的任何狀態都可以呼叫close()方法,player狀態變爲CLOSED,這時player釋放媒體資源,不再可用。
Player.deallocate()只能在PREFETCHED,REALIZED狀態下呼叫,它使player返回前一個狀態。
Player的五個狀態和狀態之間的轉換如下圖所示:
介紹了Player,它的方法和狀態,下面讓我們來爲BlackBerry創建第一個媒體播放程序。
1. 引入需要的類
import javax.microedition.media.Manager; import javax.microedition.media.Player; import java.io.IOException;
|
2. 通過Manager.createPlayer()方法獲得Player實例
3. 呼叫Player.realize()方法來爲播放做準備,應用程序獲取需要的媒體信息。
4. 呼叫Player.prefetch()使BlackBerry應用程序獲取必要的媒體信息,裝載部分媒體內容爲開始播放做好準備。
5. 呼叫Player.start()開始播放。
Player p = Manager.createPlayer("http://www.test.rim.net/abc.wav");
/** * 指向媒體文件的abc.wav的URL作爲一個URI參數傳入Manager.createPlayer()。 * * 最好規範是先叫realize(), 然後prefetch(), 再start()。按照這個持續可以減少 * 播放延遲。 * * 直接呼叫start()其實是先呼叫prefetch(0)也就是realize(),在開始播放。 */ p.start(); |
6. 呼叫Player.stop()來停止播放。
7. 呼叫Player.close()使Player進入CLOSED狀態,player實例不再可用。