一、 概述

MMS彩信大家都看到过,或者都编辑过。在这里,利用一系列的文章来说明彩信的编辑、发送和接收的过程。首先这里,简单描述一下彩信的编辑过程。这是彩信的第一步。

二、MMS的表述(presentation)语言——SMIL概述

MMS由一系列类似于“power point style”类型的slide组成,由这些slide来组织各种格式的文本、音频、视频信息。这些我们在发送或者接受彩信的时候都有切身的体会,就不说了。

为了把这些多媒体信息组织到一起,通过网络发送,并且这些信息在接收者那里能够保证按照发送者的样式进行播放。这里就需要采用一种技术,用于描述彩信的组织和播放方法。这种方法就是利用SMIL语言。看过这个语言的规范之后,我想大部分熟悉HTML和XML的人都会会心的笑了,的确,这就是SMIL语言。

MMS使用SMIL(Synchronized Multimedia Integration Language)的子集作为表述语言,SMIL是由W3C(world wide web consortium)制定的基于XML的表述语言标准(可以参见附录中之处的RFC文档)。相当于HTML之于web。SMIL语言可以控制多媒体对象的layout和timing(播放时间)。

在初期,MMS只使用了SMIL的简单基础子集,称作“MMS SMIL”。每个MMS信息都是由SMIL表述语言文件组成。在这个文件中所有的slide有相同的layout。每个slide至少包含两个region,一个包含文本,一个包含图像。事实上,每个slide都是一个frame,每个frame包含layout和指向内容(text、images、audio、video)的索引。每个slide的播放周期以秒计算,在每个slide的内部,文本和图像的播放时间可以单独设定。

由于每个移动设备的尺寸不尽相同,所以SMIL被设计成可以根据终端的不同表现形式作以重新安排。简单说来,SMIL具有下列特点:

§来自于W3C的规范定义

§SMIL只是简单地限定了各种message元素在何时、在什么地方显式

§SMIL文件以<smil>标记开始,接下来是head和body标记,最后以</smil>结束

§Head标记元素限定了

§Body标记元素限定了被插入内容的参考索引(references),并且限定了何时、何地播放以及每个元素播放的时间。

下面一段文字来自于IBM,说明了在MMS之外SMIL的广泛用途。

SMIL 2.0是同步多媒体集成语言(Synchronized Multimedia Integration Language),它已开始成为将多媒体集成到Web 内容的重要新方法。SMIL 提供基于 XML 的方法来控制多媒体元素的定时和表示,它已开始获得众多大的软件供应商和工具制作商的支持,这使得开发人员使用它变得越来越容易。

SMIL支持已开始成为 Adobe、Microsoft以及(也许是最重要的)媒体传递领先者 Real Networks 支持的技术之一。众多较小的供应商已开始提供SMIL 创作工具和播放器。

在不久的将来,随着对当前2.0 规范支持的增长,对于任何在工作中需要某种形式的多媒体资产控制的开发人员,使用 SMIL将成为他们的标准策略。如果把正在增长的工具创建者的名单作为某种指示,那么用SMIL 构建表示也会变得更简单。

正如前面提到的那样,最广泛的 SMIL 2.0 实现可能来自 Real Networks。RealOne Player支持 SMIL 2.0 语言概要文件(SMIL 2.0 Language Profile),它结合了SMIL 支持的大多数(尽管不是全部)模块。除了支持大多数标准 SMIL 模块以外,RealNetworks 还开发了自己的几个 SMIL 扩展。要使用这些扩展,开发人员必须遵守标准 XML 声明.

通过使用少量的一系列基于 SMIL 的 XML 元素和属性,Microsoft的 HTML+TIME 给 HTML 页面添加了定时和多媒体支持。为了给 HTML 文档添加定时,开发人员要向现有的 HTML 元素添加新属性。创建新元素是为了使向HTML 页面添加媒体变得简单。

为了使用任何HTML+TIME 元素,开发人员必须在 HTML 标记中声明 XML 名称空间 t:

不同于上述这两个供应商,大多数创作工具和播放器开发人员主要分为两种,

§           一种是只关注 SMIL 的完整台式机部署

§           另一种至少要关心一下用于占用资源较小的移动设备的基本SMIL 2.0 子集。

此外,随着无线网络的发展,关注MMS 部署的 SMIL 播放器应该对 SMIL 创作有新的考虑。

三、          SMIL简单示例

下面给出了一个MMS消息的SMIL示例:

<smil>

<head>

<meta name="title" content="vacation photos" />

<meta name="author" content="Danny Wyatt" />

<layout>

<root-layout width="160" height="120"/>

<region id="Image" width="100%"

height="80" left="0" top="0" />

<region id="Text" width="100%"

height="40" left="0" top="80" />

</layout>

</head>

<body>

<par dur="8s">

<img src="FirstImage.jpg" region="Image" />

<text src="FirstText.txt" region="Text" />

<audio src="FirstSound.amr"/>

</par>

<par dur="7s">

<img src="SecondImage.jpg" region="Image" />

<text src="SecondText.txt" region="Text" />

<audio src="SecondSound.amr" />

</par>

</body>

</smil>

具体的SMIL描述语言的解释可以参见附录的参考文档,那里给出了每种标记的解释说明。

至于在手机软件上实现,也不是很困难的事情。想想看。

利用结构数组,把所有的MMS中的slide存储到其中,最后,结合SMIL语言的规范,把彩信

打包成上述文件的格式,注意,这里,并不需要把具体的多媒体文件内容添加到smil文件中,只需要加在smil文件中,作为附件就可以了。具体的数据的加载,请看下一篇——MMS的打包部分吧!

参考资料:

Nokia:

       [N1] How_To_Create_MMS_Services.pdf http://www.forum.nokia.com

       [N2] MMSCenterAppDevGuide.pdf  http://www.forum.nokia.com

OMA:

      [O1] WAP-205-MMSArchOverview-20010425-a.pdf

一、MMS的封装(Encapsulation)——MIME

对于使用SMIL语言描述的MMS,在通过无线网络发送的时候,我们必须通过某种方式把SMIL和附属的内容包装在一起,一边能够以一个unit(整体)的形式发送出去,以便SMIL文件各个部分内容的reference变得有效。

这个解决的办法就是MIME(Multipart Internet Mail Extensions)规范,这个规范的最初作用是在email的plain text的主体中加入不同的内容。比如说,发送带有附件的email,这个时候你就使用了MIME的规范。MIME负责把所有的独立的文本、图像、声音、视频内容以及SMIL文件本身捆绑在一起,这个规范称为MIME Encapsulation Aggregate Documents,用于告诉接受的终端这个MMS的内容是相互相关(related to one another)并且相互参考的(referenced to one another)。

1.       MIME封装示例

下面是根据RFC文档给出的MIME的封装示例:

Content-Type: multipart/related; boundary="boundary-example";

type="text/html"

--boundary-example

Content-Type: text/html; charset="US-ASCII"

... ... <IMG SRC="fiction1/fiction2"> ... ...

... ... <IMG SRC="cid:97116092811xyz@foo.bar.net"> ... ...

--boundary-example

Content-Type: image/gif

Content-ID: <97116092511xyz@foo.bar.net>

Content-Location: fiction1/fiction2

--boundary-example

Content-Type: image/gif

Content-ID: <97116092811xyz@foo.bar.net>

Content-Location: fiction1/fiction3

--boundary-example--

§Content-type

位于信息头部的content-type用于通知接收的终端消息的各个不同部分的内容是相互关联的、并且可能是相互索引的(refer to one another)。

§Boundary

Boundary用于分割各个不同的消息part。第一个部分是一个html类型的消息,这里只是取得了相关的部分。第二和第三部分省略了实际的images图像的实体。

§Location and ID

在HTML文本部分我们可以看到,我们可以利用两种方式来索引消息内容的不同部分。这两种不同的方式是content-ID 和 content – Location。

如果一部分的消息体想通过content-ID指向(refer to)另外一部分的消息体,可以使用“CID”.

关于MIME的部分的信息可以参考附录中列出的RFC文档(RFC2387和RFC2357)。

2.       利用MIME封装MMS的示例

下面给出一个利用MIME封装MMS的示例:

Content-Type: multipart/related;

Type="application/smil"; Start="<AAAA>";boundary="----=_Part_24362_271418.1110357304160"

------=_Part_24362_271418.1110357304160

content-type: text/x-vCalendar;Charset=UTF-8;Name="slide1.vcs"

content-id: <slide1.vcs>

content-location: slide1.vcs

Content-Transfer-Encoding: base64

QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjEuMA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMDUw

MzA4VDA5MDAwMFoNCkRURU5EOjIwMDUwMzA4VDEwMDAwMFoNClNVTU1BUlk7Q0hBUlNFVD1VVEYt

ODtFTkNPRElORz1RVU9URUQtUFJJTlRBQkxFOuaYr+WQpg0KQ0FURUdPUklFUztDSEFSU0VUPVVU

Ri04O0VOQ09ESU5HPVFVT1RFRC1QUklOVEFCTEU6QVBQT0lOVE1FTlRTDQpFTkQ6VkVWRU5UDQpF

TkQ6VkNBTEVOREFSDQo=

------=_Part_24362_271418.1110357304160

content-type: application/smil;Charset=UTF-8;Name="20050309163706.smil"

content-id: <AAAA>

Content-Transfer-Encoding: base64

PHNtaWw+PGhlYWQ+PGxheW91dD48cm9vdC1sYXlvdXQgd2lkdGg9IjE3NiIgaGVpZ2h0PSIxNzQi

Lz48cmVnaW9uIGlkPSJmdWxsIiB3aWR0aD0iMTc2IiBoZWlnaHQ9IjE3NCIgbGVmdD0iMCIgdG9w

PSIwIiAvPjwvbGF5b3V0PjwvaGVhZD48Ym9keT48cGFyIGR1cj0iNXMiPjx0ZXh0IHNyYz0ic2xp

ZGUxLnZjcyIgcmVnaW9uPSJmdWxsIiAvPjwvcGFyPjwvYm9keT48L3NtaWw+

------=_Part_24362_271418.1110357304160--

下图给出的图示说明各个部分之间的关系:

3.       一个完整的MIME封装MMS示例

下表给出了一个完整的MIME封装MMS的示例:

MIME Object

Date:Fri, 14 Dec 2001 15:13:21-0500 (EST)

X-Mms-Expiry: Thu,20 Dec 2001 21:52:25-0500 (EST)

X-Mms-Delivery-Time:Wed, 19 Dec 2001 21:52:25-0800 (PST)

X-Mms-Priority:Normal

X-Mms-Sender-visibility: Show

X-Mms-Message-Class: Personal

X-Mms-Delivery-report: yes

X-Mms-3GPP-MM3-Version: 4.3.0

From: mms-email-sample@sample-email.ericsson.com

To: +12345@mmc.sample-mms.ericsson.com

Subject: Sample SMIL

Mime-Version: 1.0

Content-Type: multipart/related; boundary="----

=_MIME_Boundary_MMS_Reference_Sample_001"

MIME Headers

"----=_MIME_Boundary_MMS_Reference_Sample_001"

MIME Start boundary

Content-ID: <index.smil>

Content-Type: application/smil; charset="US-ASCII"; name=index.smil

<smil>

<head>

<layout><root-layout/>

<region id="region1_2" top="0" left="0" height="100%" width="100%"/>

<region id="region1_1" top="0" left="0" height="100%" width="100%"/>

</layout>

</head>

<body>

<par dur="2000ms">

<text src="Cid:image" region="region1_2"/>

</par>

<par dur="2000ms">

<img src="Cid:txt" region="region1_1" fit="fill"/>

</par>

</body>

</smil>

SMIL document

"----=_MIME_Boundary_MMS_Reference_Sample_001"

MIME boundary

Content-Type: text/plain; name=mms.txt

Content-Transfer-Encoding: 7bit

Content-ID: <txt>

Content-Disposition: attachment; filename=mms.txt

This is a sample MMS message, for use as a reference.

Text Document

"----=_MIME_Boundary_MMS_Reference_Sample_001"

MIME boundary

Content-Type: image/gif; name=sample.gif

Content-Transfer-Encoding: base64

Content-ID: <image>

Content-Disposition: attachment; filename=sample.gif

R0lGODlhZQBQAPcAAOYeAClUpyAtb/XNjlo8RqoUFHSa2ZCKjHiCWrzf/2iQ1J

m66Yeq4cXm/6ys

<entire encoded image not shown for the sake of brevity>

kBiJkjiJlFiJlniJmJiJmriJnNiJnviJoBiKogh5AQEAOw==

Image

"----=_MIME_Boundary_MMS_Reference_Sample_001"

MIME boundary

二、MMS的MIME结构

综述来说,每个MMS信息按照MIME规范的基本结构如下图所示:

从图示看出,每个MMS都是由MMS Header和MMS Body组成,MMS Header根据WAP-209协议和RFC2387的规定,由一系列的域组成,下表列出了部分的域(给出的示范的内容表示),其中有些是强制必须实现的(用黑体表示)。

X-Mms-Message-Type

m-send-req

X-Mms-Transaction-ID

1234

X-Mms-MMS-Version

1.0

Date

星期五, 18三月 2005 06:43:40 GMT

From

mms-editor@toolkit

To

33333333333333

Cc

33333333333333

Bcc

Subject

test

X-Mms-Message-Class

Personal

X-Mms-Expiry

星期六, 19三月 2005 06:43:40 GMT

X-Mms-Delivery-Time

星期五, 18三月 2005 06:43:40 GMT

X-Mms-Priority

low

X-Mms-Sender-Visibility

Show

X-Mms-Delivery-Report

No

X-Mms-Read-Reply

No

Content-Type

application/vnd.wap.multipart.related; start="<presentation-part>" type="application/smil"

1. MMS承载的内容elements

MMS只是用于发送消息的载体,根据规范,我们可以发送各种不同类型的内容元素。这些内容元素组成MMS中各个不同的部分。根据元素类型的不容,每个part Header部分的content-type也不尽相同。下面给以示例:

文本:文本包含很多类型,普通文本的类型可以表示为——text/plain,而vcard类型的文本表示为text/x-vCard。 
静态图像:静态图像存在各种不同的类型,根据不同的编码方式由不同的后缀名表示。如image/gif和image/jpeg。

音效是什么呢?没有介绍,应该是audio/mid 吧..

Android-MMS中彩信附件的格式及分析相关推荐

  1. fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析

    本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...

  2. Android系统中如何得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在Android平台下,办公系统,ERP,CRM等开发过程中,需要对Doc, docx, xls, xlsx, ppt, ppts, pdf, html等各种格式的文件内容进行搜索和查找,实现这些格式 ...

  3. android 彩信附件添加删除

    添加附件. 在ComposeMessageActivity里 addAttachment(int type) 函数 根据type的不同,分成6个case case A:  MediaSelectLis ...

  4. android 彩信接收到附件的下载原理分析

    (之前有一位仁兄说博客布局在一些浏览器会出现阻挡文字,因此为了市民的方便(也就是me^0^),建议大家也用chrome来浏览,毕竟这个博客布局简明,我有点不想换) 彩信收发宏观步骤: a. 终端A向彩 ...

  5. 高通android 7.0彩信发送过程中使用到的google pdu

    对于彩信与数据库的交互操作,google并没有将这部分代码放在Mms中,而是放在framework中的pdu部分. 具体代码路径是在:opt\telephony\src\java\com\google ...

  6. android 验证邮箱格式,android开发中, 如何验证邮箱的格式 ?

    满意答案 moienrn77 2016.09.05 采纳率:56%    等级:9 已帮助:115人 在Android中,调用Email有三种类型的Intent: Intent.ACTION_SEND ...

  7. 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(三,接收彩信2,下载彩信)

    彩信的接收简介: 主要是由应用程序负责从彩信服务中心(MMSC Multimedia Messaging Service Center)下载彩信信息.大致的流程是Frameworks会先发出一条短信, ...

  8. Android Studio中的代码格式快捷方式

    本文翻译自:Code formatting shortcut in Android Studio I have started developing with Android Studio . 我已经 ...

  9. 【Google Play】从 Android 应用中跳转到 Google Play 中 ( 跳转代码示例 | Google Play 页面的链接格式 | Google Play 免安装体验 )

    文章目录 前言 一.从 Android 应用跳转到 Google Play 代码 二.Google Play 页面的链接格式 三.Google Play 免安装体验 前言 本博客参考资料 链接到 Go ...

最新文章

  1. 【poj3420】 Quad Tiling
  2. Windows7 64位机上Emgu CV2.4.2安装与配置
  3. 从AdventureWorks学习数据库建模——保留历史数据
  4. this - 想说爱你不容易
  5. 泊松分布E(X^2)
  6. wave文件 fft_STM32F103 如何实现 FFT?
  7. python post与get的区别_Python Requests库 Get和Post的区别和Http常见状态码
  8. 生活杂记 - 丢东西
  9. 每周收获(11-13)
  10. SpringBoot整合Quartz
  11. 微信小程序 自定义导航栏
  12. 工作-safari时间格式
  13. 韶大talk 评论热度抽取
  14. 前后端及常用语言介绍
  15. ESD防护方法及设计要点
  16. Amazon Shield Advanced 更新 – 自动应用程序层 DDoS 防御
  17. Android UI性能优化 检测应用中的UI卡顿
  18. 计算机c盘如何腾出空间,WIN8的C盘太大怎么清理腾出空间呢
  19. 闪存主控芯片国产进程
  20. 关于Android Https网络连接失败奇葩问题 ExtCertPathValidatorException

热门文章

  1. 我为什么鼓励你读计算机博士
  2. 21. 查询表sc——查询平均成绩大于等于90分的学生学号和平均成绩
  3. 关于微信小程序开发注意
  4. python OOP面向对象笔记
  5. RuntimeError: mat1 and mat2 shapes cannot be multiplied
  6. 设计新鲜事(News Feed)系统
  7. freertos和嵌入式linux区别,嵌入式工程师,你知道为什么要学RTOS?为什么要选用FreeRTOS?...
  8. 小米手机自带红外传感器安卓应用程序代码
  9. 互联网产品运营日记(1):上线首日
  10. mysql添加用户并赋予权限命令