一、 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" mce_SRC="fiction1/fiction2"> ... ... ... ... <IMG SRC="cid:[email protected]" mce_SRC="http://mce_host/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 用于通知接收的终端消息的各个不同部分的内容是相互关联的、并且可能是相互索引的(refer to one another )。
Boundary 用于分割各个不同的消息part 。第一个部分是一个html 类型的消息,这里只是取得了相关的部分。第二和第三部分省略了实际的images 图像的实体。
在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" mce_src="Cid:image" region="region1_2"/> </par> <par dur="2000ms"> <img src="Cid:txt" mce_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"