最近看了《j2me开发精解》跟《javaME核心技术与最佳实践》的MMAPI的内容,根据书上的内容把音乐播放器,视频播放器,录音,跟拍照的功能实现了一次,这里写一下对这些实现的心得。
首先我介绍一下MMAPI的内容。其实MMAPI可以分为四部分内容:播放器(Player)、数据源(DataSource)、控制器(Control)还有管理它们的管理器(Manager)。播放器负责处理各种多媒体数据,数据源负责提取数据,控制器负责管理播放器,例如,可以控制声音的大小。概括起来就是从数据源读取数据,然后交给播放器播放,控制器能够控制播放器播放,它们是由管理器管理的。
接着我介绍怎么创建一个简单的播放器(Player)。
通过调用Manager.createPlayer(InputStream stream, String type)可以创建一个播放器的实例。stream是一个指向多媒体文件的输入流,type指定媒体的格式。
还可以调用Manager.createPlayer( String locator)方法创建播放器实例,locator是一个定位符,能够从web服务器读取多媒体文件。
Player有四个状态,它们按顺序分别是unrealized--realized--perfetched--started四个状态,当Player创建的时候处于unrealized状态,在这个状态中,Player还没有获得媒体文件的信息,然后调用Player的realize()方法就能使它过度到realized状态,在此状态中Player已经获得媒体文件的大部分信息,在这个状态中能够调用getControl(Sting tye)方法获得Control的实例,从而对媒体文件的控制(在unrealized状态调用此方法会报错,因为Player还没有获得足够资源),然后调用perfetch()方法进入perfetched状态,书上说在这个状态播放器做好播放的所有准备,我对这个状态还不清楚什么意思,不过不要紧,这个不影响我们程序的编写。最后调用start()播放器就会播放文件了。
现在介绍一下如何播放一个mp3文件。这里我只实现的思想。
首先读mp3文件,例如读取本地文件getResourceAsStream(String path)
然后创建一个Player的实例Manager.createPlayer(InputStream stream, String type)
接着可以进入realezed状态,获得Control的实例控制媒体文件的播放getControl(String type)
最后调用start的方法进行播放start()
这样就能实现一个媒体文件的播放。
播放视频文件
大致内容跟播放mp3一样,但是比mp3文件多了一样就是显示视频。当取得Control对象后,调用Control对象的initDisplayMode(int modle,object arg)方法.这个方法的modle参数有两个选择,一个是VideoControl.USE_GUI_PRIMITIVE另一个是VideoControl.USE_DIRECT_VIDEO,当你modle的参数为VideoControl.USE_GUI_PRIMITIVE的时候,第二个参数org为null,这个方法就会返回一个form的对象,把这个对象添加到Display()对象里面就能够播放视频。当第一个参数为VideoControl.USE_DIRECT_VIDEO的时候,第二个参数为一个实现了Canvas类的实例,然后系统就会自动在这个实例中添加视频播放的功能。
录音功能
1,创建一个Player对象Manager.createPlayer("capture://audio");
2,创建一个Control的实例Manager.createPlayer("capture://audio"),在这个实例里面,设置播放录音的长度,把录到的录音保存的数组里面(创建一个数组对象,调用setRecordStream(byte[])),这样就能在录制完录音后把录音播放出来。还有录音的时候要开启一个新的线程。
3,开始录音,先调用Player的start()方法,再调用Control的startRecord()发法。
拍照功能
1,创建一个Player对象Manager.createPlayer("capture://video")
2,创建一个Control的实例getControl("VideoControl"),通过这个实例可以调用initDisplayMode(int modle,object arg)来获得摄像头所拍到的图片,具体用法跟视频播放相识。
3,调用Control的getSnapShot(String arg)方法,参数可以指定所拍照的格式,长宽,例如encoding=jepg所拍的相片就以jpeg格式存储,这个方法返回的是一个字节数组。将这个数组转换为图片的格式显示出来即可