彩信2 SMIL 和 MIME

抄自某人,那个某人说原帖地址已经不可考了。就这样。


一、概述

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:[email protected]"> ... ...


--boundary-example


Content-Type: image/gif
Content-ID: <[email protected]>
Content-Location: fiction1/fiction2
--boundary-example
Content-Type: image/gif
Content-ID: <[email protected]>
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: [email protected]
To: [email protected]
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 吧..


OldKitty(老猫)关于mms的一个回复也把它贴在这里:

MMS 概括来说包括两大部分的内容:内容和传输.其中内容包括上面各位说的文字/图象/声音等等,而且有多种不同的格式(content  type  and  content  format),而这些内容可以通过SMIL组合起来,控制显示/播放的顺序和位置等. 
传输则是我上面所说的 那些,理论上讲可以采用多种方式,因为3gpp只是定义了需要用到的各个源语及其功能和可包含的域,但并未定义具体的格式,因此wapforum就制定了 在wap的基础上如何实现MMS的规范,其中具体定义了各个源语的格式.所以目前来说,见到的手机上的MMS实现应该都是基于wap的.当然了,由于 wsp与http有着密切的联系和基本的对应关系,因此利用http也可以获取和发送mms,在wap2.0中其实就直接可以使用针对无线修改过的 http(如果我没有记错的话),而wsp/wtp/wtls/wdp等协议已经退居二线了

Teky说:
网上的开发mms彩信发送/接受的资料还是比较少的,也不全面,据说相关技术被几家大公司垄断,和和,不知真假,反正要真正写出实现代码还是有很大困难的。
在这里佩服下老兄James lee ,能在这么短时间内写出来,还真是强悍。
不过目前少了mms中的音效部分,不知道在多媒体包头中音效的包头要如何来打包,继续研究...

你可能感兴趣的:(html,xml,网络协议,Nokia,WAP)