一、引言
在当前世面上存在着大量的不同媒体格式,并且还有许多新的媒体格式即将被建立。为了存储和传输这些不同的媒体格式,存在着了许多不同格式的存储设备和传输协议,例如大家常使用的媒体存储设备(如CD、VCD以及DVD),有线传输协议(如UDP、HTTP),无线传输协议(如WAP)。
为了使移动装置能够访问这些不同格式的媒体数据,必须为其设计一个规范化的、强大的和可扩充的应用接口。J2ME中就提供了一套为规范的播放和录制音频或视频接口,即Mobile Media API (MMAPI)。
二、MMAPI体系结构
一般情况下,可以将媒体处理过程分解为两个过程:
◆处理媒体数据的传输协议的过程。
◆处理媒体数据内容的过程。
1、处理媒体数据的传输协议的过程
处理传输协议的过程是指从数据源(如一个文件、一个捕获装置或一个流服务)上读取媒体数据内容后,将其传送到媒体数据内容处理的过程。
MMAPI使用Data Source来处理媒体数据的传输协议的过程。一个Data Source知道如何从它的原始位置读取媒体数据并传送给媒体数据处理(Player)。媒体数据可以被保存在不同的位置,从远程服务器到资源文件或者RMS数据库。媒体数据可以从原始位置通过HTTP,像RTP一样的流式传输协议,或者其他机制传输到媒体数据处理(Player)。图一展示了Data Source的工作过程。
图1:Data Source工作过程
javax.microedition.media.protocol.DataSource提供了MMAPI的Data Source的支持。
2、处理媒体数据内容的过程
处理媒体数据内容的过程通常需要对媒体数据进行解释和解码,并且还需要认别该媒体的输出设置的类型,如是音频设置或者视频设置。举个例子,当DataSource从某媒体数据源上获取一MP3媒体数据,并将其传送给处理媒体数据内容过程,此过程首先对这个MP3媒体数据进行解析和解码,同时检测该MP3媒体为音频数据,打开装置的音频设备,将解析和解码后的媒体数据直接传送到装置的音频设备缓冲中,由该音频设备根据缓冲区中的数据内容产生音频信号。
MMAPI使用Player来处理媒体数据内容。一个Player是javax.microedition.media.Player接口的一个实现实例,它从Data Source中读取媒体数据、解析和解码数据以及识别媒体输出设备和传送媒体数据到输出设备等。Player提供了一套方法去控制媒体的重放和同步。
MMAPI还提供了一个或多个Controls来调整player的行为,可以在player从媒体转换数据的时候从一个player实例取得并且使用Controls。我们可以通过Player中提供的一些特殊的Controls访问一些特殊的媒体类型。Controls由javax.microedition.media.Control接口实现。
3、Manager
J2ME为了实现对DataSource和Player有效管理,使用了工厂机制,由Manager来负责创建Player和DataSource。这样的机制在JAVA中到处可见,如JDBC中的DriverManager,这里我就不对这种机制进行介绍了。Manager不仅可以从DataSource中创建Player,而且还可以从本地或InputStream中创建Player。图二展示了MMAPI整体结构图。
图2:MMAPI整体结构图
三、使用MMAPI
MMAPI提供的类和接口都在javax.microedition.media中,在程序中使用MMAPI时,首先应该引用这些包,否则程序无法编译。
每个MMAPI程序都需要创建一个Player对象,前面我们已经介绍过,MMAPI使用Manager的CreatePlayer函数来创建Player对象,该函数有三个版本,其格式如下:
public static Player createPlayer(String locator)
throws IOException, MediaException
public static Player createPlayer(DataSource source)
throws IOException, MediaException
public static Player createPlayer(InputStream stream, String type)
throws IOException, MediaException
第一个版本实现通过URL字符串指定的协议和数据位置的信息创建一个Player对象,其中locator的格式如下:
Manager将对createPlayer函数中提供的URL字符串参数进行分析,创建一个Data Source对象,由该对象完成对媒体数据的传输工作,并从数据中获取该媒体的数据内容类型,Manager将根据这个媒体数据类型创建相应的Player对象,如果Manager无法确定DataSource的内容类型,它将抛出一个MediaException异常。
例:创建一个控制某网站MP3音频的Player对象。
Player pMP3 = Manager.createPlayer( "http://www.XXX.com/111.mp3");
第二版本实现通过已知的DataSource对象创建Player对象。
第三版本实现通过InputStream流创建Player对象。
我们根据应用实际的情况选择使用那种版本来创建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访问的声音文件,请使用:
如要播放一段已经被置于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();
}
|
原文来自与(http://developer.51cto.com/art/200711/61297.htm)
- 大小: 4 KB
- 大小: 9.4 KB
分享到:
相关推荐
J2ME MMAPI(Mobile Media API)是Java Micro Edition平台中用于开发移动多媒体应用程序的接口。这一API允许开发者在移动设备上实现音频和视频的播放与录制功能,兼容多种媒体格式和传输协议。以下是对MMAPI核心概念...
总的来说,J2ME 的 MMAPI 是开发移动设备多媒体应用的重要工具,它使开发者能够创建功能丰富的应用程序,提供丰富的用户体验。然而,由于设备差异和资源限制,开发时需要注意兼容性和性能优化。
### J2ME中使用MMAPI开发手机摄像头程序详解 #### 概述 J2ME(Java 2 Platform Micro Edition)是Sun Microsystems为嵌入式和移动设备设计的Java平台。MMAPI(Multimedia API)是J2ME平台的一个扩展,提供了多媒体...
- profiles还可以根据具体设备和应用场景进一步细分,例如MMAPI(Mobile Media API)用于多媒体处理,WMA(Wireless Messaging API)用于短信服务等。 **J2ME开发环境** 开发J2ME应用通常需要以下工具: - **JDK*...
JSR-135,全称为JavaTM Media Framework API,是Java ME(J2ME)平台中用于多媒体应用开发的重要规范。它为移动和嵌入式设备提供了处理音频、视频和图像的能力,使得开发者能够创建功能丰富的多媒体应用程序。在本文...
- **J2ME 3D概述**:随着3D技术的发展,J2ME也支持了3D应用开发,特别是针对手机游戏。J2ME 3D通过提供一套API(如Mascot Capsule 3D)来支持3D图形渲染、动画等功能,从而使得开发者能够创建更为丰富和复杂的3D移动...
- **IDE选择**:推荐使用Eclipse或NetBeans等集成开发环境,这些工具提供了丰富的功能支持J2ME应用程序开发。 - **配置环境变量**:设置JAVA_HOME和PATH等环境变量,确保系统能够识别到JDK的安装位置。 #### 三、...
javaME 源码 包括基础知识 、Canvas、RMS 、多线程 、...9移动网络应用 10文件管理 11个人信息管理 12无线消息服务 13Push技术 14XMl应用 15多媒体开发 16游戏开发 17设计模式 18单元测试 19"在线听歌"商务应用实例
**J2ME移动媒体API开发者指导** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的嵌入式设备,如移动电话和掌上电脑...对于希望在移动领域开发创新应用的人来说,深入学习和掌握MMAPI是必不可少的。
接下来,MIDP(Mobile Information Device Profile)是J2ME的一部分,它是针对移动设备的应用开发框架。MIDP定义了用户界面、网络连接和数据存储等方面的接口和类,让开发者可以构建能够在各种移动设备上运行的Java...
总的来说,"mmapi-1[1].2-mrel2-spec.zip" 提供的中文文档是J2ME开发者不可或缺的工具,无论你是初学者还是经验丰富的开发者,都能从中受益,提升你在移动设备多媒体应用开发方面的技能。这份文档详尽的接口描述和...
MIDP(Mobile Information Device Profile)是J2ME的一部分,主要针对移动设备,特别是手机的游戏和应用开发。MIDP2.0是MIDP的一个版本,增加了更多功能和改进,如更强大的用户界面组件、多媒体支持和数据存储。 ...
在J2ME(Java 2 Micro Edition)开发中,与手机系统的交互是非常常见的,而这一交互的核心在于理解和使用J2ME Property属性表。这些属性提供了关于设备硬件、软件配置以及功能支持的重要信息,使得开发者能够根据...
在Java 2 Micro Edition (J2ME)环境中,开发移动应用时可能会涉及到播放声音的需求。J2ME 提供了 Mobile Media API (MMAPI) 来处理多媒体内容,包括音频。MMAPI 是MIDP (Mobile Information Device Profile) 1.0 的...
- J2ME提供了多种扩展功能,如蓝牙API(JSR 82)、无线消息API(JSR 120)和移动多媒体API(JSR 135)等。 - 这些扩展功能使得开发者能够在不同的设备上实现更丰富的功能,如蓝牙通信、无线消息传递和多媒体处理。...
Java 2 Platform Micro Edition (J2ME) 是一种专为嵌入式和移动设备设计的 Java 平台,...总的来说,J2ME为开发者提供了开发移动和嵌入式设备应用程序的强大工具,它的灵活性和可扩展性使其成为该领域的首选开发平台。
总的来说,J2ME的MMAPI为移动设备提供了丰富的多媒体功能,但它的使用需要考虑到设备的多样性。开发者需要学习如何利用Player、Control和Manager来实现跨设备的兼容性,同时通过DataSource灵活地处理不同类型的媒体...
J2ME WTK支持多种设备和配置,特别适用于移动电话和平板电脑等移动设备上的应用开发。 ##### 1.1 快速入门 - **快速入门**部分提供了关于如何快速启动J2ME WTK的基本指导,适合初学者快速了解并开始使用该工具包。...