利用Java开发和实现移动应用程序教学内容•确定MMAPI包及其组件•javax.microedition.media•javax.microedition.media.control•javax.microedition.media.protocol•利用MMAPI包播放音频和视频•开发一个自动唱片点唱机应用程序MIDP1.0与MMAPIMIDP1.0缺乏对多媒体的支持,哪怕是简单的音频播放都不支持,移动多媒体API彻底解决了J2ME平台对多媒体支持的不足,提供了一个功能强大、设计灵活,且使用简单的框架来处理音频和视频。MMAPI主要针对具有高级声音和多媒体能力的J2ME设备课程5A/幻灯片3/共33张利用Java开发和实现移动应用程序移动多媒体API简介目前市面上存在大量不同的媒体格式,并且还有许多新的媒体格式即将被建立。为了传输和存储这些媒体格式,存在着许多不同格式的存储设备和传输协议为了能够使用一定设备能够访问这些不同格式的媒体,必须为其设计一个规范化的、强大的和可扩充的应用接口。J2ME提供了一套为规范播放和录制音频或视频接口,即移动多媒体API(MMAPI)。•移动多媒体API(MMAPI)提供了一组类和接口,可以用来在移动设备上创建和播放多媒体内容。例如,可以使用MMAPI创建声音,也可以用它来捕捉音频和视频数据。•MMAPI是一个可选包,可在支持J2ME的设备上支持多媒体应用程序。此Java规范由JCP在JSR135中定义。其设计目的是运行任意协议和格式;例如,它没有指定实现必须支持特定传输协议(如HTTP或实时传输协议(RTP))或媒体格式(如MP3、MIDI或MPEG-4)。•使用MIDP2.2开发的J2ME应用程序可以访问MMAPI1.1。因此,这些应用程序还能够捕获和播放视频及图片。但是,MIDP2.0提供的多媒体功能仅限于音频支持。课程5A/幻灯片4/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构•MMAPI定义了一组(共三个)包,用于播放和控制移动设备上的多媒体内容。•MMAPI中定义的三个包是:•javax.microedition.media:•提供用来创建和管理Player对象的Manager类。Player对象表示移动设备中的多媒体播放器。•javax.microedition.media.control:•提供各种类型的控制接口,可以用于Player对象。•javax.microedition.media.protocol:•用于设定协议,以控制用户自定义的控件。只在MMAPI中提供该包,并且它不是MIDP2.0的一部分。课程5A/幻灯片5/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构(续)•MMAPI中的三个包提供了一组用来在移动设备上播放和控制多媒体内容的类和接口。•下表中列出了MMAPI包中定义的类:类描述Manager根据指定的多媒体内容来创建Player对象。该类是在javax.microedition.media包中指定的。ContentDescriptor创建一个用来存储特定的媒体类型的容器。该类是在javax.microedition.media.protocol包中指定的。DataSource表示一个用来处理媒体的抽象,它隐藏了访问各种源的数据的过程细节,如来自服务器的文件或流数据。Player对象使用该类来访问输入数据。该类是在javax.microedition.media.protocol包中指定的。课程5A/幻灯片6/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构(续)接口描述Control用来控制一个Player对象的媒体重放功能。在javax.microedition.media中定义该接口。Controllable用来从Player对象中检索控件。该接口提供了用来查询Player对象并检索所需信息的方法。在javax.microedition.media中定义该接口。Player用来播放多媒体内容。在javax.microedition.media中定义该接口。PlayerListener用来接收Player对象产生的异步事件。在javax.microedition.media中定义该接口。TimeBase用于一个提供时间测量的源。可以使用该接口来测量同步多个Player对象的时间进度。在javax.microedition.media.protocol中定义该接口。SourceStream和一个DataSource对象一起使用以便向一个Player对象提供输入接口。在javax.microedition.media.protocol中定义该接口。FramePositioningControl指定和控制视频播放器中视频帧的位置。在javax.microedition.media.protocol中定义该接口。GUIControl用来控制使用移动设备的GUI功能的Player对象。在javax.microedition.media.control中定义该接口。课程5A/幻灯片7/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构(续)接口描述MetaDataControl用于检索和控制多媒体流中存储的元数据信息。这个接口定义在javax.microedition.media.control中。MIDIControl可以用于访问和控制MIDI-playing设备。该接口定义在javax.microedition.media.control中。PitchControl在不影响回放速度的前提下,提高和降低声音的音调。这个接口定义在javax.microedition.media.control中。课程5A/幻灯片8/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构(续)接口描述RateControl控制多媒体内容在Player对象中的播放速度。这个接口定义在javax.microedition.media.control中。RecordControl控制Player对象中多媒体内容的录取。这个接口定义在javax.microedition.media.control中。StopTimeControl用于预设定时器,以停止一个播放器。这个接口定义在javax.microedition.media.control中。课程5A/幻灯片9/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构(续)接口描述TempoControl用于控制声音的节奏。节奏定义为每分钟的拍数。这个接口定义在javax.microedition.media.control中。ToneControl用于播放和控制用户定义的音调序列。这个接口定义在javax.microedition.media.control中。VideoControl用于控制视频数据在Player对象上的播放。这个接口定义在javax.microedition.media.control中。课程5A/幻灯片10/共33张利用Java开发和实现移动应用程序描述MMAPI包及其架构(续)接口描述VolumeControl控制一个Player对象的音量。这个接口定义在javax.microedition.media.control中。课程5A/幻灯片11/共33张利用Java开发和实现移动应用程序MMAPI架构ManagerMultimediaDataMultimediaOutputControlControlDataSourcePlayerCreatesCreatesanduses课程5A/幻灯片12/共33张利用Java开发和实现移动应用程序MMAPI架构•MMAPI架构由四个组件构成:•Manager类是整个MMAPI框架的入口,它将和其他三部分紧密地组织在一起。管理器提供了静态方法可以创建各种类型的播放器,还可以查询播放器支持的协议格式和媒体类型•Player接口:其作用在于正确处理某种类型的媒体内容,比如某种类型的播放器能够正确播放MP3格式的文件,而另一种类型的播放器能够播放3gpp格式的视频文件。•Control:用来改变播放器的行为。VolumeControl可以调整音频播放器的声音大小。VideoControl可以控制摄像区域的位置和大小,Control接口定义在javax.microedition.media包中,其子类都定义在javax.microedition.media.control包中。•DataSource类:数据源知道如何从多媒体文件的位置取得媒体内容提供给播放器,媒体文件可以存储在WEB服务器,RMS持久存储空间或者文件系统。媒体数据可以通过HTTP或者RTP等协议传输给Player。课程5A/幻灯片13/共33张利用Java开发和实现移动应用程序实现MMAPI•你可以使用MMAPI中定义的类和接口来创建和控制多媒体内容。为了创建和控制多媒体内容,需要在移动设备上实现MMAPI的各种接口和类。•你可以使用MMAPI来控制移动设备的特定多媒体应用程序,比如播放不同的格式的电话铃声和声音文件。•你也可以使用MMAPI来在移动设备上播放和记录视频。•为了能够播放多媒体内容,你需要创建一个Player对象,并且要指定需要播放的数据。Manager类根据指定的多媒体内容来实现适当的Player接口。例如,如果在Manager类的createPlayer()方法中指定一个视频文件,会生成一个能够播放特定的视频文件的Player对象。•MMAPI也可以用于直接播放多媒体内容,而无需用到Player对象。例如,可以使用Manager类的playTone()方法在移动设备上播放单音。MMAPI特性支持单音,重复播放和记录基于时间的多媒体文件以CLDC为目标设计小巧,目的为了节省资源MMAPI并非针对任何内容类型和协议可以只实现MMAPI的子集,这就是为什么MIDP2.0中能够只实现其子集的原因扩展性强,MMAPI在不修改原来的功能的情况下可以添加新的功能,更重要的是,可以轻松支持额外的格式,API框架为额外的控制预留了位置。选择性实现实现者可以只实现部分功能MMAPI的主要任务处理数据传输协议意义在在于把数据源从文件、流媒体服务器或者设备的摄像头等位置读入到媒体处理系统中。处理数据内容意义在于将数据解析、解码并绘制到输出设备上,如扬声器或者手机屏幕上。这两个任务主要由Player和DataSource类分别来完成的,DataSource屏蔽数据来源的细节,不管它是从哪里过来的,可以是流、文件或者服务器资源等等。而Player则负责解码工作,绘制DataSource提供的数据到输出设备上。媒体数据数据源播放器http,rtp,file利用Java开发和实现移动应用程序实现MMAPI组件•MMAPI提供了各种类和接口,可以用于实现移动设备的多媒体框架的各种组件。•例如,Player类代表移动设备中的多媒体播放工具并且有助于实现该工具。PlayerListener接口定义了事件类型,这些事件类型用来处理播放多媒体内容时出现的不同类型的事件。将控制接口(如VideoControl和VolumeControl)添加到Player对象,以便允许移动用户在移动设备上控制多媒体内容的特性,如音量和节奏。•MMAPI为使用移动设备捕捉和存储多媒体内容提供了支持。•可以使用VideoControl对象实现一个取景器,以用于在移动设备上观看多媒体内容。在取景器中观看内容的同时,还可以使用VideoControl.getSnapshot(StringimageType)方法来拍照,并将照片保存为可移植网络图像(PNG)格式。•实现Manager类•Manager类是一个静态工厂类,可以用于创建Player对象。•Manager类定义了三个重载的createPlayer()方法,用于创建Play