知识大全 使用J2ME MMAPI开发移动多媒体应用技术

Posted 媒体

篇首语:哪里有天才,我是把别人喝咖啡的功夫,都用在工作上的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用J2ME MMAPI开发移动多媒体应用技术相关的知识,希望对你有一定的参考价值。

使用J2ME MMAPI开发移动多媒体应用技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 引言

  在当前世面上存在着大量的不同媒体格式 并且还有许多新的媒体格式即将被建立

  为了存储和传输这些不同的媒体格式 存在着了许多不同格式的存储设备和传输协议 例如大家常使用的媒体存储设备(如CD VCD以及DVD) 有线传输协议(如UDP HTTP) 无线传输协议(如WAP)

  为了使移动装置能够访问这些不同格式的媒体数据 必须为其设计一个规范化的 强大的和可扩充的应用接口 J ME中就提供了一套为规范的播放和录制音频或视频接口 即Mobile Media API (MMAPI)

  二 MMAPI体系结构

  一般情况下 可以将媒体处理过程分解为两个过程

  ◆处理媒体数据的传输协议的过程

  ◆处理媒体数据内容的过程

   处理媒体数据的传输协议的过程

  处理传输协议的过程是指从数据源(如一个文件 一个捕获装置或一个流服务)上读取媒体数据内容后 将其传送到媒体数据内容处理的过程

  MMAPI使用Data Source来处理媒体数据的传输协议的过程 一个Data Source知道如何从它的原始位置读取媒体数据并传送给媒体数据处理(Player) 媒体数据可以被保存在不同的位置 从远程服务器到资源文件或者RMS数据库 媒体数据可以从原始位置通过HTTP 像RTP一样的流式传输协议 或者其他机制传输到媒体数据处理(Player) 图一展示了Data Source的工作过程

  

  

  图 Data Source工作过程

  jadia protocol DataSource提供了MMAPI的Data Source的支持

   处理媒体数据内容的过程

  处理媒体数据内容的过程通常需要对媒体数据进行解释和解码 并且还需要认别该媒体的输出设置的类型 如是音频设置或者视频设置 举个例子 当DataSource从某媒体数据源上获取一MP 媒体数据 并将其传送给处理媒体数据内容过程 此过程首先对这个MP 媒体数据进行解析和解码 同时检测该MP 媒体为音频数据 打开装置的音频设备 将解析和解码后的媒体数据直接传送到装置的音频设备缓冲中 由该音频设备根据缓冲区中的数据内容产生音频信号

  MMAPI使用Player来处理媒体数据内容 一个Player是jadia Player接口的一个实现实例 它从Data Source中读取媒体数据 解析和解码数据以及识别媒体输出设备和传送媒体数据到输出设备等 Player提供了一套方法去控制媒体的重放和同步

  MMAPI还提供了一个或多个Controls来调整player的行为 可以在player从媒体转换数据的时候从一个player实例取得并且使用Controls 我们可以通过Player中提供的一些特殊的Controls访问一些特殊的媒体类型 Controls由jadia Control接口实现

   Manager

  J ME为了实现对DataSource和Player有效管理 使用了工厂机制 由Manager来负责创建Player和DataSource 这样的机制在JAVA中到处可见 如JDBC中的DriverManager 这里我就不对这种机制进行介绍了 Manager不仅可以从DataSource中创建Player 而且还可以从本地或InputStream中创建Player 图二展示了MMAPI整体结构图

  

  

  图 MMAPI整体结构图

  三 使用MMAPI

  MMAPI提供的类和接口都在jadia中 在程序中使用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异常

  例 创建一个控制某网站MP 音频的Player对象

  Player pMP = Manager createPlayer( )

  第二版本实现通过已知的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对象的状态转换图

  

  

  图 状态转换图

  四 播放常见媒体的方法

   播放单音与序列音

  如果要播放一个单音一次 可使用

  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 C ToneControl C + );p start();

   播放声讯和MIDI

  声讯是指如WAV这样的声音格式 在这种格式中 数据是各种声讯样本的一个流 它代表着该声讯每一秒钟的片断 MIDI则是一系列的命令 用作多乐器的某种 虚拟合成器

  如要播放一段能够通过HTTP访问的声音文件 请使用

  Player p = Manager createPlayer( )

  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(); 

   播放视频

  播放视频类似于音频播放 然而 需要告诉视频播放器在哪里显示视频信号 因此 需要从视频播放器处得到一个 视频控件 然后在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();

cha138/Article/program/Java/hx/201311/26084

相关参考

知识大全 J2ME 2005移动开发这场竞赛的领跑者

J2ME2005移动开发这场竞赛的领跑者  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  年移动开

知识大全 高可靠性移动应用程序---J2ME工具(1)

高可靠性移动应用程序---J2ME工具(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在不

知识大全 高可靠性移动应用程序---J2ME工具(3)

高可靠性移动应用程序---J2ME工具(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JM

知识大全 使用Eclipse开发J2ME手机应用程序

使用Eclipse开发J2ME手机应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是

知识大全 J2ME 带给移动支付的优势解析

J2ME带给移动支付的优势解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  移动支付是一种在移

知识大全 J2ME手机开发:java虚拟机是什么

J2ME手机开发:java虚拟机是什么  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!就是许多基于j

知识大全 整合SE J2ME SDK与eclipse开发环境

整合SEJ2MESDK与eclipse开发环境  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  S

知识大全 java系统相对于安卓系统的缺点是什么

java系统相对于安卓系统的缺点是什么安卓就是基于java系统开发的,只是在此基础上更多的支持了j2me的类似于java.util包下的功能类,有助于移动端开发WP系统相对于安卓和iOS有什么优势啊?

知识大全 甲骨文推NetBeans IDE 7.4 提升网络及移动应用开发

甲骨文推NetBeansIDE7.4提升网络及移动应用开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 用PB开发多媒体数据库管理系统

用PB开发多媒体数据库管理系统  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  图像声音数字视频是