使用J2ME MMAPI开发移动多媒体应用技术
讨论组:
我们根据应用实际的情况选择使用那种版本来创建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();
}
- 最新文章
- 深入了解J2ME配置层所扮演的角色[01-11]
- J2EE探索:有状态网络的J2EE技术[01-11]
- Antenna与j2me打包详细介绍[01-11]
- J2ME游戏优化秘密[01-11]
- 使用Eclipse配置doja开发环境[01-11]
- 缩小Doja程序的大小[01-11]
- 相关文章
- 深入了解J2ME配置层所扮演的角色[01-11]
- J2EE探索:有状态网络的J2EE技术[01-11]
- Antenna与j2me打包详细介绍[01-11]
- J2ME游戏优化秘密[01-11]
- 教您如何使用EclipseME开发J2ME程序(2)[01-11]
- J2EE基础:使用JSF技术开发Web应用程序[01-11]
