2019独角兽企业重金招聘Python工程师标准>>>

什么是 MMS

MMS 是 Multimedia Messaging Service (多媒体消息服务) 的缩写,中文译为“彩信”,可以用于传送文字、图片、动画、音频和视频等多媒体信息。

手机终端合成多媒体消息后,可以向网内所有合法用户发送多媒体消息,由 MMSC ( 多媒体消息中心 )对消息进行存储和处理,并负责将消息在不同MMSC之间的进行传递转发,同时接收方用户可以从MMSC接收多媒体消息。

多媒体消息服务要求一个WAP网关,一个数据传输网(例如:电路交换网、GPRS 或者WCDMA等)和一个短消息中心。目前MMS业务在实现时是以WAP作承载,短消息作提示通知,由MMS手机自动到MMSC中去提取。

多媒体消息 的大小通常在几十K字节到上百K字节之间,这是由运营商和手机终端双方面决定的,目前中国大部分地区的手机仅支持小於50KB的多媒体信息。

MMS与SMS在消息发送方式上是相同的:都是存储一转发业务——即消息不直接送达用户,而是先送至消息中心,再经过消息中心转发到目标用户。但是MMS与SMS也存在很大差异,首先是网络结构和承载方式的不同:SMS是使用GSM的信令通道,而MMS是基于WAP协议栈,走数据通道,其传输能力大大超过SMS,用户不再受带宽的限制;第二,而MMS可以支持丰富的数据格式,包括图形、图像、声音、动画,在带宽允许的情况下还可以支持流媒体,这大大提高了消息内容的丰富程度和表达能力。

MMS协议概述

MMS是由OMA(Open Mobile Alliance)和3GPP(3G Partnership Project)共同主持制定的工业标准,其旨在寻求一种与系统无关的、开放的,使各种应用和业务能够在全球范围内的各种终端上实现的多媒体消息通讯标准。

MMS运行在WAP协议层之上,它不局限于传输格式,既支持CSD(Circuit-Switched Data 电路交换数据格式),也支持GPRS格式(General Packet Radio Service 通用分组无线服务),以WAP为载体传送视频、图片、声音和文字。

OMA负责定义的相关协议关注“消息如何打包 ”的问题,3GPP负责定义的协议则关注“消息如何发送、路由和接收 ”的问题。

OMA的主要协议文档:

  • Multimedia Messaging Service Architecture MMS架构概述;
  • Multimedia Messaging Service Client Transactions 关于MMS客户端;
  • Multimedia Messaging Service Encapsulation Protocol MMS封装协议;

3GPP的主要协议文档:

  • (TS-22.140)Multimedia Messaging Service Stage 1 关于MMS服务层 ;
  • (TS-23.140)Multimedia Messaging Service Stage 2 关于MMS功能描述;
  • (TS-26.140)MMS Media formats and codes 关于MM支持的媒体格式和编码

除以上罗列之文档外,还有WAP无线会话协议相关的文档需要了解,例如:SMIL等 等 。

MMS系统构成

构成MMS业务系统的主要网络单元如下图所示:

MMSC(多媒体消息业务中心)是整个系统的核心,它完成对MM的存储和处理,包括消息的输入输出、地址解析、通知、报告等等,它由MMS中继服务器MMS Relay 、MMS Server、User DB、Message Store共同组成。

WAP网关,因为SMS的传输信道对于MMS来说太窄了,所以MMS使用WAP的WSP作为传输协议,因此需要一个WAP网关连接MMSC和无线WAP网络 。

MMS Redirector(MMS重定向器):全网范围内会有若干个MMSC,它们的URL地址是唯一的,MMS重定向器就是负责发送者用户归属MMSC路由查询功能的网络实体 。

ENUM-DNS(号码域名解析器):解析接收方用户归属的MMSC的地址,接收MMSC发送的查询请求,查询接收者地址对应的归属MMSC的URI地址,并返回给MMSC,由MMSC将消息发往该用户归属MMSC服务器。

MMS系统接口

注:接口命名有两种方式,一种是MMSm / MMSR   ,另一种是MM1/MM2等  ,其都指相同东西;

整个MMS业务系统的运转是所有相关网络功能实体的相互通讯协作来达成,MMS相关协议文档的主要功能之一,就是 明确定义各网络功能实体之间相互通讯协作的标准接口,以下是相关接口的简要说明:

  • MM1(MMS M ) 接口 :MMS Relay/Server 和MMS Client之间的接口 ;
  • MM2(MMSS )接口:MMS Relay和MMS Server之间的接口;
  • MM3接口:MMS Relay/Server 与外接应用服务器之间接口;
  • MM4接口:不同MMSC之间交互的接口;
  • MM5接口:MMS Relay/Server和HLR(Home Location Register)之间的接口; 注:HLR是一个中央数据库,其记录了每个移动电话用户使用GSM核心网络功能的授权信息;
  • MM6接口:MMS Relay/Server 和MMS User DB之间交互的接口;
  • MM7接口:MMS Relay/Server和MMS增值业务应用平台之间的接口;
  • MM8接口:MMS Relay/Server与计费系统之间的接口;

MM1(MMSM )接口将是我们的学习重点,这是我们开发彩信应用程序必须要了解的规范知识。

MMS Client 业务模型(MMS Client Transaction Model)

以MM1接口为讨论范围,则MMS服务实现了MMS Client和MMS Proxy-Relay服务器之间的业务调用,业务(Transaction)特指信息的传递流程及方式,以其对MMS终端设备状态变化的影响。下面详述各种不同的与MMS Client 相关的业务类型:

  • M-Send :MMS 客户端发送消息到MMS Proxy-Relay 服务器 ;

M-Send业务提供了MMS Client向MMS-Relay提交多媒体彩信,并获得响应信息的基本机制,下图是该业务的通讯流程: 

在MMS Client向MMS Relay提交的PDU(Protocol Data Unit)中,包含有能唯一标识其自身的ID字段,该字段使得请求/回应(req/resp)被对应关联起来。

当 MMS Relay服务器 收到一个M-Send.req PDU时,它会回应一个M-Send.conf数据包,其中包含有请求处理结果的状态代码。如果MMS Relay能够成功处理该请求,那状态代码将为'OK',并会返回一个message-ID作为MM的唯一标识。

  • M-Notification :MMS Proxy-Relay服务器发送通知到MMS 客户端;

MMS Relay服务器发送 M-NotificationPDU 给MMS Client,以告知其有新的多媒体消息,同时MMS Client 会 回应状态代码 ,下图是该业务的通讯流程: 

在MMS-Relay服务器发往MMS Client的PDU——M-Notification.ind 中包含有一个兼容于RFC2396的URI,这是收取MM的入口地址,还有消息大小、过期时间、推荐收取方式等附加信息。

MMS Client收到M-Notification.ind PDU后会主动回应一个M-NotifyResp.ind数据包,以表明已得到通知。

  • M-Retrieve :MMS 客户端从MMS Proxy-Relay服务器收取MM——多媒体消息;

M-Retrieve业务是MMS Client发送给 MMS Relay服务器以收取MM的请求,该请求的PDU传输在WSP/HTTP协议之上。取决于收取方式(即时收取or延时收取)的不同,在MMS-Relay服务器和MMS Client之间可能需要一个确认环节,下面分别是即时收取和延时收取时的通讯流程:

MMS Client会以 M-Notification.ind PDU中的URI为参数,向MMS Relay服务器 索取MM内容。服务器会想MMS Client回应M-retrieve.conf数据包,如果成功的话其中会包含完整的MM内容,当然回应中的状态代码会指示操作是否成功。

  • M-Forward :MMS 客户端向MMS Proxy-Relay服务器发送转发请求;

M-Forward业务使得MMS Client可以将MMS-Relay服务器中的一条MM转发给其它用户,下面是该业务的通讯流程:

MMS Client发送一个M-Forward.req PDU到MMS-Relay服务器,该请求中包含有定位MM的URI,以及至少1个的目标地址(即被叫用户的号码)等参数,MMS-Relay服务器会回应一个M-Forward.conf PDU,其中包含指示操作是否成功的状态码。另外, 转发业务是一个可选功能,在某些运营商的网络上可能不会被支持。

  • M-Delivery :MMS Proxy-Relay服务器发送投送报告给MMS 客户端;

M-Delivery业务允许源MMS Client(即 发送 彩信的用户)及时得到信息被投递的通知,该通知是一个M-Delivery.ind数据包,下面是该业务的通讯流程: 

该业务 只有一个步骤,没有对应回应环节,其发送给MMS Client的PDU 包含了源消息的发送情况,如果有多个目标用户,则会有多条 M-Delivery.ind 数据包 。

另外,与投递报告相似的还有“已读报告(Read Report)”,取决于Client端的版本会有两种不同的情况:MM阅读报告、PDU阅读报告。

  • M-Cancel :MMS Proxy-Relay服务器向MMS 客户端发送取消请求;

M-Cancel业务允许MMS-Relay服务器向MMS Clinet发送撤销一条多媒体消息的请求,下面是该业务的通讯流程图:

MMS-Relay服务器会向MMS Client发送M-Cancel.req数据包,其中包含了目标MM的ID,例如:cancel ID。该业务是可选功能,在某些运营商的网络上可能不会实现 。

  • M-Delete :MMS 客户端从MMS Proxy-Relay服务器上删除多媒体消息;

M-Delete业务允许MMS Client删除MMS-Relay服务器上的一条多媒体信息,下面是该业务的通讯流程图:

MMS Client想要删除1条或多条存储在MMS-Relay服务器上的MM时,可以发送M-Delete.req数据包到MMS-Relay服务器,该数据包含1个或多个标识具体MM的URI,而MMS-Relay服务器会回应M-Delete.conf数据包,其中包含有操作完成情况的状态码。

MMS消息格式及封装

在以上 业务模型的介绍中,通讯流程中的主体是 用于承载业务数据的PDUs(Protocol Data Units),本节将关注这些数据单元的基本机构、内容组成、封装编码等几个方面。 MMS PDU的内容类型(content-type)必须被指定为 application/vnd.-wap.mms-message ,用于被客户端准确识别。

基本结构

MMS PDU由消息头(Header)和消息体(Body)组成。Header具体描述了PDU的特定信息,Body是消息的具体内容(Body体是可选的)。大多数MMS PDU只含有 Header 域,用于建立和维持通信, Body体 只用在M-Send.req 和 M-Retrieve.conf 两个数据包中。下图是MMS PDU基本结构的示意图:

消息头(Header) 由一系列的域组成,包括PDU类型,接受方,发送方,发送时间等等。Header域中的项分为可选项和必选项,并且在编码MM头域时,X-Mms-Message-Type,X-Mms-Transaction-ID 和 X-Mms-MMS-Version必须位于MM头的最开始,而且要严格按照所列顺序,Content-Type头域必须在MMS头域的最后,其后为消息体,其它域的顺序可以随意安排。

消息体 ( Body ) 是多个不同类型的多媒体对象组成的,每个对象占据一个部分——Part(参见RFC2387标准),根据各个部分是否有序,消息的组装方式分为:

  • .application/vnd.wap.multipart.mixed :所有的消息内容混合在一起,没有时间上的顺序,终端同一时间一次就把所有的消息内容显示出来。
  • .application/vnd.wap.multipart.related :消息内容的各部分之间有一定的关系,该关系可能是显示时间上的先后,或者显示位置的不同,等等。这使得消息能够像“幻灯片”一样的显示。

消息体的内容组成

在application/vnd.wap.multipart.mixed类型的PDU中,仅包含有组成MM的所有多媒体内容,而在application/vnd.wap.multipart.related类型的PDU中还会包括Presentation —— 即消息内容的显示控制部分,该部分使用SMIL标记语言编写,用来描述MM中各部分的播放次序,显示/播放时间,结束时间以及在屏幕中 的 显示位置,等控制信息 。

通常, Presentation部分是消息体的第一个part,若不是则必须使用start 字段指出其所在位置, Presentation部分并不会被显示出来,而仅仅是让终端根据它获取一些控制信息,这些信息决定了其它内容的显示大小、先后顺序、位置等 。

最后 采用 MIME标准( Multipurpose Internet Mail Extensions - 多用途互联网邮件扩展 )将 完整的MM(包括: SMIL 、 文本、图像、声音、视频等 各个独立部分) 打包封装在一起,并发送。 MIME标准定义在RFC2045 、RFC2046 、RFC2047 、RFC2048、RFC2049 等多个RFC标准之中。

MM的二进制编码封装

大多数情况下,MM都基于WAP协议进行传输,它将MMS PDU被封装在WSP/PDU之中 作为WSP的消息体进行传输,并采用WAP/WSP协议作为传输内容的二进制编码(binary encoding)机制,进行消息的封装(Encapsulation)。

在OMA-TS-MMS-ENC-V1_3-20080128-C.pdf文档所在规范中,详细定义了每个PDU所涉及的Header域和值,以及为它们分配的二进制码的一一对应关系。采用此二进制编码规范,节约了无线领域的带宽资源,并最优化其在空中传播的数据量。

具体对应关系请参阅相关文档。

来源:http://www.iteye.com/topic/618885

转载于:https://my.oschina.net/u/211005/blog/110202

MMS 协议学习笔记相关推荐

  1. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  2. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. POP3协议学习笔记

    今日得闲,于是将POP3的学习笔记也整理出来! 互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀.. ...

  4. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

    1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...

  5. 网络协议学习笔记 · 22

    IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫 VPN 作用 VPN与代理的区别 实现原理(隧道协议) 网络爬虫 简易实例 robots.txt 无线网络 缓存(Cache) 响应头 请求 ...

  6. CoAP协议学习笔记 1.2 一张表了解 CoAP 协议

    1 前言 对于CoAP协议的学习,这份100多页的文档肯定没法背下来.我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题. 本篇笔记中先对 CoAP 协议内容做个基础了解 ...

  7. CoAP协议学习笔记 3.1 CoAP协议翻译 加密基础介绍

    CoAP协议学习笔记可点此查看. 1 前言 在之前的学习中,没有过多关注加密.但实际部分厂家的IoT平台(阿里云.OneNET)已经启用了相关安全处理,有必要深入学习下. 在 CoAP 协议 RFC7 ...

  8. BGP协议学习笔记——BGP基础

    BGP协议学习笔记--BGP基础(BGP概念.BGP报文.BGP状态机.BGP关系建立.BGP路由通告) 说明:本文学习笔记整理自网络.华为公开产品文档.华为公开PPT及部分的自我理解 一.BGP简介 ...

  9. 极客HTTP协议学习笔记破冰篇(1-7)

    极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...

最新文章

  1. 如何用FAPROTAX预测微生物群落功能
  2. UTF-8编码规则(转)
  3. java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...
  4. Xcode9的xib只支持iOS7.0及以上版本
  5. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder
  6. java 成员函数_Java继承中成员变量和成员函数的覆盖
  7. 四行代码创建复杂(无限级)树
  8. Elasticsearch笔记三之版本控制和插件
  9. 大数据可视化搭建存在哪些难题
  10. matlab中firrcos,DMR数字集群关键技术的应用研究
  11. 【Linux】进程通信、同步、IO复用代码
  12. 如何用C语言实现【简易关机程序】
  13. pdfjs转图片_Vue项目pdf(base64)转图片
  14. 计算机语言中str是什么意思,python中str函数的作用是什么
  15. 计算机黑屏但是有鼠标,电脑黑屏但是鼠标能动解决方法
  16. matlab 矩阵命令,matlab中的矩阵的基本运算命令
  17. Docker之MySQL主从连接提示:Communications link failure
  18. scala的两种变量类型 var 和 val
  19. 操作系统(COPY自wk)
  20. 一世12年龄在泥土还在打,硅谷00创业毕竟开始播放!

热门文章

  1. python发布_python如何发布模块
  2. 较为综合的c语言题目,c语言考试综合题.doc
  3. java输出结果校验_2. Bean Validation声明式校验方法的参数、返回值
  4. pytorch torchvision.transforms.CenterCrop
  5. 1.1为什么选择序列模型
  6. 2.2 logistic 回归
  7. reStructuredText
  8. SQL数据库层面操作(DDL)
  9. 程序员面试需要出示身份证和毕业证原件吗?
  10. 计算机等级考试四级有多少题,全国计算机等级考试四级试题(一)