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实例不再可用。