MMS协议

MMS格式解析

简介:

MMS是微软的私有流媒体协议。
它的最初目的是通过网络传输多媒体广播、视频、音轨、现场直播和一系列的实时或实况材料。
MMS建立在UDP或TCP传输/网络层上,是属于应用层的。使用TCP的MMS上URL是MMS://或者MMST://,如果是UDP的MMS使用MMSU://。
在低带宽的情况下推荐使用UDP连接。在有防火墙的情况下使用HTTP。在下载MMS的时候TCP是不二的选择。服务器上的媒体文件是以ASF或WMA形式存在。直播通过流媒体服务器组装成数据包。
如果是TV/视频的话,一个包可能会由多个流组成,但是语音广播就只有一个流。

MMS协议包有两种:命令包和数据包。

MMS命令包头

以下是小端格式。左边=LSB,右边=MSB。0f 00 00 00 就相当于0f。

字段长度(bytes)描述
可能是版本号4B01 00 00 [00]:从client发出的格式是固定的。[00]域从服务器发出的时候是可以发生变化的
命令ID值,或许是版本或者序列号4B固定CE FA 0B B0
命令数据包长度4B计算到全部数据末尾,从协议类型域之后开始计算
协议类型4B固定值为MMS :4D 4D 53 20
直到包尾的长度4B包含自身数据域
序列号4B命令是由客户端发向服务器的,序列号的计数从0开始。命令的响应拥有同样的序列号。也就是说序列号就是ECHO。客户端总是发起命令
双精度时间戳8B用于网络时序
到包尾的长度4B包括自身
Comm2B命令值:含义参考MMS命令列表
Dir2B方向域,0x03 = 向服务器,0x02 = 向客户端。
命令包通常都包括上述内容,最小字节是40。命令包头是作为命令发送的最小包。
注意:包长域包括到包末尾所有的padding。命令包长度跟在其后,先是‘prefix 1’然后是‘prefix 2’,接下来直到命令包结束都是‘command specific data’。
命令指定数据可以是字符串文本‘Unicode 16bit’,或者是raw 8位数据。
在prefix 数据解说之后可以看到命令特定数据段含义。

01 至Server

Prefix 1 	f0 f0 f0 f0 - 标志(见标志段)Prefix 2 	0b 00 04 00Then 		1c 00 03 00
功能:发送初始链接信息,包含播放器的版本号、客户端GUID(随机产生)和要连接的服务器地址。
注意:客户端GUID是随机生成的,具体内容见'locally generated GUIDs'.

01 至Client

Prefix 1 	00 00 00 00 - 错误码Prefix 2 	f0 f0 f0 f0 - 标志(详见标志段)
结构体定义如下:
服务器返回诸如服务器软件版本等信息。0b 00 04 00 ??
1c 00 03 00 ??
00 00 00 00 00 00 f0 3f 双精值为1内容不详
01 00 00 00 ??
01 00 00 00 ??
00 80 00 00 ??
00 00 a0 00 ??时有为80 96 98 00 = 10000000
Ww ww ww ww 服务器版本字符串长度
Xx xx xx xx 工具版本字符串长度
Yy yy yy yy 播放器下载链接长度
Zz zz zz zz 加密方式字符串长度

02 至Server

Prefix 1 	f1 f0 f0 f0 - 标志(见标志段)Prefix 2 	ff ff ff ffThen 		00 00 00 00Then 		00 00 a0 00 - 未知Then 		02 00 00 00 – 映射包头ID类型(Header PacketIDType )
发送传输协议、客户端地址和客户端套接字端口号到服务器。

02 至Client

Prefix 1 	00 00 00 00 - 错误码Prefix 2 	f1 f0 f0 f0 - 标志Then 		nn nn nn nn - 4 bytes 数据长度
长度计数单位是4字节,也包括了Length域,所以4Bytes就是1。
Then Unicode字符串数据

03 至Client

Prefix 1 00 00 00 00 - 错误码Prefix 2 00 00 00 00
由服务器返回,指明协议选择的错误。同时也表示从服务器发向客户端的关闭套接字连接的请求。在这个命令之后连接中断。

05 至Server

Prefix 1 01 00 00 00 -命令级别Prefix 2 ff ff ff ffThen 8 zeros (未知)或许是双精值Then Unicode数据
这条命令请求位于服务器上的文件路径和文件名。这不包含IP或DNS信息,只有媒体的路径和文件名。

05 至Client

Prefix 1 00 00 00 00 - 错误码Prefix 2 04 00 00 00 - 响应Media PacketIDType值Then 下述结构体

现在发送媒体数据,包括媒体的播放时间。

01 00 00 00	未知但是可以改为01
00 00 00 00	可能是偏移时间,例如00 00 00 40200 00 00 00	??
00 00 00 00	??
00 00 00 00	??
Xx xx xx xx	单精浮点值,显示文件时间减去缓冲区时间,仅在seek模式有效,其他情况下总为1

06 至Client

Prefix 1 00 00 00 00 - 错误码Prefix 2 01 00 00 00Then 结构体如下

功能:答复文件名和路径请求。包括文件数据的包数,包长度和文件播放时间。06命令的数据类似于ASF文件的头信息。一旦媒体在服务器上定位,媒体流的细节和包便被返回。下面是prefix后的结构体信息:

01 00 00 00 结果标志
00 00 00 00
00 00 00 00
00 00 xx yy 广播标志
Tt tt tt tt tt tt tt tt 双精度文件时间点
Ll ll ll ll 回放文件的长度(秒为单位),实时则为0
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
Pp pp pp pp 媒体包长度,单位byte
Nn nn nn nn 媒体总包数,实时为0x000xffffffff
00 00 00 00
Ss ss ss ss 最高流比率值
Hh hh hh hh 头大小,单位bytes
Zeros 数据结构末尾的40bytes零数据

07 至Server

Prefix 1 01 00 00 00 - 命令级别Prefix 2 ff ff 01 00 -76 04 00 00 #Then 结构题描述如下

功能:从包xx 开始文件播放。这条命令也用以恢复下载或请求丢包。在Seek模式下用来发送播放点。

8 bytes 双精格式,Seek秒数。
4 bytes FF
4 bytes 包序列号
ff ff ff ff 从开始播放
注意:v9版本中不可用,任何值都是从头开始播放
3 bytes 最大的流时间限制
1 byte 允许流限制标志
4 bytes Media PacketIDtype
4 bytes 可选数据# 如ff ff ff 7f
4 bytes 可选数据# 如00 00 00 00
4 bytes 可选数据# 如ff ff ff 7f
4 bytes 可选数据# 如00 00 00 00

09 至Server

Prefix 1 01 00 00 00 - 命令级别Prefix 2 ff ff 01 00

停止播放,媒体播放器发送这条命令,流停止,保持套接字连接。

0A 至Client

Prefix 1 	00 00 00 00 - 错误码Prefix 2 	04 00 00 00 - 响应PacketIDTypeData 		00 00 00 00 00 00 00 00 - 双精值

此命令在快进/后退中使用。

0D 至Server

Prefix 1 01 00 00 00 - 命令级别Prefix 2 01 00 00 00

协议中止。常用在关闭套接字连接时。

11 至Client

Prefix 1 	00 00 00 00 - 错误码Prefix 2 	02 00 00 00 - 显示头的PacketIDTypeThen 		00 00 00 00 - ??Then 		00 00 00 001c 00 03 00 用法未知。

在播放器请求时发送头或UDP包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HDU - 6118】度度熊的交易计划(最小费用可行流,网络流费用流变形 )

题干: 度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区。 由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品&#xff0…

老王说ros的tf库

ros的tf库 为了这个题目,我是拿出了挤沟的精神挤时间,是下了功夫的,线性代数、矩阵论复习了,惯性导航里的dcm、四元数也了解了,刚体力学也翻了,wiki里的欧拉角也读了,tf的tutorial、paper、sou…

Apollo进阶课程 ③ | 开源模块讲解(中)

目录 1)ISO-26262概述 2)ISO-26262认证流程 3)ISO-26262优点与缺陷 原文链接:Apollo进阶课程 ③ | 开源模块讲解(中) Apollo自动驾驶进阶课程是由百度Apollo联合北京大学共同开设的课程,邀请…

python 问题集

打开文件是报:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xe9 in position 0: unexpected end of data UnicodeDecodeError:“utf-8”编解码器无法解码位置0中的字节0xe9:unex 在open中加入encodingunicode_escape 如: with open(file_n…

【HDU - 6447】YJJ's Salesman(降维dp,树状数组优化dp)

题干: YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is he at the destination, or on the way to destination. One day, he is going to travel from city A to southeastern city B. Let us assume that A …

由浅到深理解ROS(5.1)- roslaunch 学习

oslaunch 用处&#xff1a;将多个rosnode 结合起来&#xff0c;一起运行。这样就不需要一个个的运行。 roslaunch格式 &#xff08;add_two.launch&#xff09; <launch> <arg name"a" default"1" /> <arg name"b&q…

CS231n Convolutional Neural Networks for Visual Recognition------Numpy Tutorial

源链接为&#xff1a;http://cs231n.github.io/python-numpy-tutorial/。 这篇指导书是由Justin Johnson编写的。 在这门课程中我们将使用Python语言完成所有变成任务&#xff01;Python本身就是一种很棒的通用编程语言&#xff0c;但是在一些流行的库帮助下&#xff08;numpy&…

【CodeForces - 1047C】Enlarge GCD(数学,枚举,预处理打表,思维)

题干&#xff1a; F先生有n个正整数&#xff0c;a1&#xff0c;a2&#xff0c;...&#xff0c;an 他认为这些整数的最大公约数太小了,所以他想通过删除一些整数来扩大它 您的任务是计算需要删除的最小整数数,以便剩余整数的最大公约数大于所有整数的公约数. Input 3 1 2 4…

TS解析文档

TS格式解析 简介&#xff1a; ts文件为传输流文件&#xff0c;视频编码主要格式h264/mpeg4&#xff0c;音频为acc/MP3。 ts的包是一个一个188字节的包组成&#xff0c;这188字节里面由一个0x47开头的包作为同步。 也就是说&#xff0c;如果你找到了0x47&#xff0c;如果与它相…

ROS入门之——浅谈launch

0.何为launch&#xff1f; launch&#xff0c;中文含义是启动&#xff0c;launch文件顾名思义就是启动文件&#xff0c;要说这launch文件啊&#xff0c;那还得从roslaunch说起。 相传&#xff0c;在程序猿们还没有使用roslaunch之前&#xff0c;需要手动rosrun逐个启动node&am…

2)机器学习基石笔记Lecture2:Learning to Answer Yes/No

目录 0.上节回顾 1. Perceptron Hypothesis Set 2. Perceptron Learning Algorithm(PLA)&#xff08;重点&#xff09; 3. Guarantee of PLA&#xff08;难点&#xff09; 4. Non-Separable Data 0.上节回顾 第一节课主要讲述了机器学习的定义及机器学习的过程&#xff0…

【CodeForces - 616C】The Labyrinth(bfs,并查集,STLset)

题干&#xff1a; 求每个*能够到达的格子数量&#xff0c;只有.可以走&#xff08;四个方向扩展&#xff09;&#xff0c;结果mod 10&#xff0c;替换 * 后输出。 Input The first line contains two integers n, m (1 ≤ n, m ≤ 1000) — the number of rows and co…

scapy和dpkt使用

scapy官方文档 Scapy 下载 # (临时换pip源) pip install scapy (-i https://pypi.tuna.tsinghua.edu.cn/simple/)导入 from scapy.all import *读取pcap文件&#xff0c;进行相关操作 # 读取文件 # 整个文件&#xff1a;packets&#xff1a;scapy.plist.PacketList对象 &…

Google Colab——谷歌免费GPU使用教程

Google Colab简介 Google Colaboratory是谷歌开放的一款研究工具&#xff0c;主要用于机器学习的开发和研究。这款工具现在可以免费使用。Google Colab最大的好处是给广大的AI开发者提供了免费的GPU使用&#xff01;GPU型号是Tesla K80&#xff01;你可以在上面轻松地跑例如&am…

javaBean和Servlet的区别

可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类。特殊在可以通过<jsp:useBean />调用JavaBean。而其他类,可以和一般java中一样使用。 Bean的参数中还可以指定范围, <jsp:useBean scope"application" />该Bean在服务器的JVM中将只有一个…

pyecharts简单使用

pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库。可以生成很多效果很棒的图表。 pycharts文档 |分割| echarts官网 本文主要介绍pycharts的简单使用 安装 # 安装 1.0.x 以上版本 &#xff08;需要python3.6及以上&#xff09; $ …

【POJ - 2373】Dividing the Path(单调队列优化dp)

题干&#xff1a; Farmer Johns cows have discovered that the clover growing along the ridge of the hill in his field is particularly good. To keep the clover watered, Farmer John is installing water sprinklers along the ridge of the hill. To make installa…

Ubuntu16.4(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境安装

1. 下载压缩包 文件分享 2. 新建目录并解压 3. 配置环境变量 sudo gedit /etc/bash.bashrc 添加路径并更新路径&#xff1a;&#xff08;PATH$PATH之间无空格&#xff09; PATH$PATH://linaro-arm/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/binexport P…

JAVA高级工程师课程笔记整理——(八)tomcat与九大内置对象

&#xff08;八&#xff09;tomcat与九大内置对象 tomcat B/S 浏览器/服务器 请求&#xff1a;request 响应: response C/S&#xff1a; 客户端/服务器 URL: 网址 URI: 范围包括url http https: 更安…

tshark 小技巧

将pcap转换成json文件&#xff0c;全部特征名都会在json中 tshark -T json -r D:\test.pcap > test.json合并数据包 mergecap -w all.pcap 1.pcap 2.pcap ...all.pcap: 合并之后的数据包 1.pcap ... 要合并的数据包&#xff0c;可以合并n个