8 


使用 Mobile Media API

Mobile Media API (MMAPI) (JSR 135) 提供了一个标准 API,用于呈现和捕获基于时间的媒体,如音频和视频。该 API 在各种设备支持的媒体格式、协议和功能等方面设计得非常灵活。有关使用 MMAPI 编程的信息,请参见以下文章:

http://developers.sun.com/techtopics/mobility/apis/articles/mmapi_overview/
http://developers.sun.com/techtopics/mobility/midp/articles/mmapioverview/


8.1 支持的格式和协议

仿真器的 MMAPI 实现支持下列媒体类型。


表 8-1 支持的 MMAPI 媒体格式

MIME 类型

描述

audio/amr

自适应多速率

audio/midi

MIDI 文件

audio/sp-midi

可扩展多和弦 MIDI

audio/x-tone-seq

MIDP 2.0 单音序列

audio/x-wav

WAV PCM 采样音频

image/gif

GIF 89a(动画 GIF)

video/mpeg

MPEG 视频

video/vnd.sun.rgb565

视频捕获


 


8.2 自适应多速率 (Adaptive Multi-Rate, AMR) 内容

Sun JavaTM Wireless Toolkit for CLDC 模拟对自适应多速率 (Adaptive Multi-Rate, AMR) 内容 (http://www.ietf.org/rfc/rfc3267.txt) 的支持。虽然工具包无法对 AMR 内容进行解码,但实现可以在请求时返回用于 AMR 内容的播放器。

8.2.1 Windows

在 Windows 上,AMR 文件将被转换为常规 WAVE 文件,然后传递到 Qsound。因为 Windows 版本界面具有 3GPP 实现功能,因此您不必进行任何操作即可播放 AMR 文件。

8.2.2 Linux

Linux 的 AMR 支持基于 3GPP AMR-NB (AMR Narrow Band) 引用实现解码器和 SOX 音频处理器(不支持 AMR-WB (AMR Warrow Band))。

8.2.2.1 启用 AMR 支持

请按照以下步骤启用 AMR 支持。

1. 获取由 3GPP 提供的 AMR-NB RI。

有若干可用的版本。其中一个版本可在以下位置找到:

http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-530.zip

2. 打开包中包含的 makefile。

找到以 "CFLAGS = " 开头的行。

a. 添加 DMMS_IO 选项。

b. 删除 pedantic-errors 选项。

保存并编译。如果遇到问题,请尝试删除 O3(或 O2)优化标志(二进制数据大小将接近二倍)。

3. 要生成 RI,请输入: make VAD=VAD1

编译之后,您将得到名为 decoder 的二进制文件。即为 AMR-NB 解码器本身。

4. 设置环境变量 AMR_DECODER 以指向解码器的路径。

例如,如果 ~/amr 是到解码器的路径,请指定:

export AMR_DECODER=~/amr/decoder

5. 设置 decoder 文件的执行访问权限。

在与解码器相同的目录下,键入:

chmod 555 ./decoder

6. 按如下方式对解码器进行测试:

运行 MobileMediaAPI 演示 Simple Player,如第 A.13 节“MobileMediaAPI”所述。从主菜单中,选择 "Simple Player",然后选择 "AMR Narrow Band [jar]"。请勿忘记打开扬声器。

8.2.2.2 AMR 格式支持

您也可能会遇到一些 AMR-NB 的“克隆”问题。AMR-NB 编解码器数据似乎至少有两种文件格式:

该格式在 draft-ietf-avt-rtp-amr-10.txt 第 6.2 节中详细说明,涵盖在 Ericsson AMR 转换器工具中。(草稿为 RFC 3267 的早期形式)。这些文件由 Ericsson AMR 工具和 Nokia Series 60 电话进行处理。它们包含标头 #!AMR\n,并按大端字节存储顺序进行编码。

该格式在附录 A 的 "3GPP TS 26.101" 中详细说明。这些文件由 3GPP TS 26.104 浮点引用编解码器源包进行编码和解码。它们不包含标头并按小端字节存储顺序进行编码。

要在这些格式之间进行转换,请尝试以下 Python 脚本:

http://www.connactivity.com/~eaw/amrwork/amrconv.py


8.3 使用 MediaControlSkin

Sun JavaTM Wireless Toolkit for CLDC 附带了一个仿真器样机 MediaControlSkin,该样机用于多媒体的回放和控制。该样机包括一些按钮,按钮上带有表示播放、停止、放大音量、减弱音量以及其他命令的符号。要了解 MediaControlSkin 的功能,请使用 MobileMediaAPI 演示应用程序测试该样机。


8.4 媒体捕获

Sun JavaTM Wireless Toolkit for CLDC 仿真器支持音频和视频捕获。通过使用仿真器运行时所在的系统的捕获功能来支持音频捕获。

通过模拟照相机输入来支持视频捕获。

有关演示如何捕获音频和视频的源代码及详细信息,请参见 MobileMediaAPI 示例应用程序。


8.5 正常的 MIDlet

MIDlet 有一个在 MIDP 规范中定义的生命周期。MIDlet 会因传入电话呼叫之类的事件而暂停。正常的 MIDlet 会在暂停后释放重要的设备资源并在 MIDlet 恢复后重新分配或重新启动这些资源。在 MMAPI 处理区域,在 MIDlet 暂停时停止正在呈现内容的所有 Player

如果暂停 MIDlet 的同时没有停止其正在运行的 Player,则 Sun JavaTM Wireless Toolkit for CLDC 将在控制台上显示一条消息。您可以使用 MobileMediaAPI 演示应用程序中的暂停音频测试 MIDlet 来测试此功能。有关详细信息,请参见附录 A

该警告消息对于每个运行中的仿真器仅出现一次。


8.6 铃声

MMAPI 可用于播放铃声,如第 A.13.1 节“Simple Tones”第 A.13.2 节“Simple Player”中所演示。有几种铃声格式比较常用。您可以下载铃声或自己创建铃声。

8.6.1 下载铃声

铃声文件可以从多个 Internet 站点下载,包括以下站点:

8.6.2 铃声格式

本节提供了几种格式的样例

http://www.convertyourtone.com/rtttl.html

以下是 Nokia Composer 格式的贝多芬第九交响曲演奏:

16g1,16g1,16g1,4#d1,16f1,16f1,16f1,4d1,16g1,16g1,16g1,16#d1,

16#g1,16#g1,16#g1,16g1,16#d2,16#d2,16#d2,4c2,16g1,16g1,16g1,

16d1,16#g1,16#g1,16#g1, 16g1,16f2,16f2,16f2,4d2

贝多芬 G 大调小步舞曲:

a b + c b + c b + c b + C p + d a B p + c g A

p f g a g a g a g A p b f G p a e F

贝多芬第九交响曲旋律:

f f f # C # d # d # d C p f f f # c # f #f # f f +# c + # c + # c # A ff f c # f # f # f f + # d + # d + # d

《G 型神探》主题曲:

C2(1/8) D2(1/16) Dis2(1/8) F2(1/16) G2(1/8)

P(1/16) Dis2(1/8) P(1/16) Fis2(1/8) P(1/16)

D2(1/8) P(1/16) F2(1/8) P(1/16) Dis2(1/8)

P(1/16) C2(1/8) D2(1/16) Dis2(1/8) F2(1/16)

G2(1/8) P(1/16) C3(1/8) P(1/16) B2(1/2) P(1/4)

C2(1/8) D2(1/16) Dis2(1/8) F2(1/16) G2(1/8) P(1/16)

Dis2(1/8) P(1/16) Fis2(1/8) P(1/16) D2(1/8) P(1/16)

F2(1/8) P(1/16) Dis2(1/8) P(1/16) C3(1/8) B2(1/16)

Ais2(1/8) A2(1/16) Gis2(1/2) G2(1/8) P(1/16) C3(1/2)

贝多芬第九交响曲:

4 F2 F2 F2 C#4 D#2 D#2 D#2 C4 R2 F2 F2 F2 C#2 F#2 F#2

F#2 F2 C#+2 C#+2 C#+2 A#4 F2 F2 F2 C2 F#2 F#2 F#2 F2

D#+2 D#+2 D#+2

贝多芬第九交响曲:

444** 444** 444** 1111* 4444** 4444** 4444** 111*

0** 444** 444** 444** 1111** 4444** 4444** 4444**

444** 11** 11** 11** 6666* 444** 444** 444** 111**

4444** 4444** 4444** 444** 22** 22** 22**

贝多芬第九交响曲:

444****444****444****111#*****444#****444#****444#****

111*****(JD)0000444****444****444****111#****444#****

444#****444#****444****11#****11#****11#****666#*****

444****444****444****111****444#****444#****

444#****444****22#****22#****22#****