一、概述
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./
[N2] MMSCenterAppDevGuide.pdf http://www.forum./
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 吧..
|