[流媒体]实例解析MMS流媒体协议,下载LiveMediaVideo[3]-阿里云开发者社区

开发者社区> 郑昀> 正文

[流媒体]实例解析MMS流媒体协议,下载LiveMediaVideo[3]

简介:
+关注继续查看

[流媒体]按照MMS协议和MS Media Server交互

下载实时交通录像的包分析[3]

 

编写者

日期

关键词

郑昀@ultrapower

2005-10-17

mms streaming protocol

ethereal 协议分析 流媒体

 

       通过mms://220.194.63.17/cebeijing8,我们可以看到交通部门设置在北京西直门上的摄像头的实时录像,从而了解西直门的交通状况。

       但是,要是想下载这个流媒体到本地的话,我试验了asfr+ASF Recorder以及StreamBox vcr,均无法下载。又找了一个mimms-0.0.9linux版本,也就是以前的mmsclient,将其依赖于Linux的某些函数库换成Windows版本的对应包,编译之后,可以下载mms://220.194.63.17/cebeijing8的数据,但是用WindowsMediaPlayer9播放的时候,却报告错误无法播放,因为此文件已损坏

       只有SDP2.0(Streaming Download Project)可以正常下载并播放它。

为了改造mimms,我分析了SDP和流媒体服务器的来往包,看看我和他的实现到底存在哪些差异。如果你也开发流媒体下载应用,希望这个分析对你理解 Microsoft Windows Media Services”协议有帮助。

 

下面是第4回合数据包。我们对每一个“包头”和“包体”的每一个字节都做了尽可能详细的分析。

对了,编码格式是“Little Endian”,也就是0f 00 00 00的实际值是0x0f
 

第四对包:client to server 告知媒体文件名

 第四回合之1个包to server;Len=80

0030                          01 00 00 00 ce fa 0b b0 40 00  ..............@.

0040   00 00 4d 4d 53 20 08 00 00 00 03 00 00 00 00 00  ..MMS ..........

0050   00 00 00 00 00 00 06 00 00 00 05 00 03 00 01 00  ................

0060   00 00 ff ff ff ff 00 00 00 00 00 00 00 00 63 00  ..............c.

0070   65 00 62 00 65 00 69 00 6a 00 69 00 6e 00 67 00  e.b.e.i.j.i.n.g.

0080   31 00 31 00 00 00                                1.1...

 

 

包头”解释:

l         01 00 00 00 ce fa 0b b0”是服务器端向客户端发包的“BOOB FACE”固定开头。以后你会看到每一个包都是如此开头的。8字节。

l         

l         05 00 03 00”, 指的是“Comm 2 bytes | Dir 2 bytes”。05 00Command数值。03 00Direction数值,这里的0x03指明客户端发往服务器。4字节。

 

在“05 00 03 00”之后,就是这个包的Body了。

“包体”解释:

l         01 00 00 00”,Command Level4字节。

l         ff ff ff ff”,MMS协议标志34字节。

l         00 00 00 00 00 00 00 00”,80

l         63 00 65 00 62 00 65 00 69 00 6a 00 69 00 6e 00 67 00 31 00 31 00”,是“cebeijing11”的ASCII码。我们在告诉服务器要读取的文件路径以及文件名。不包括IP地址或者DNS信息,仅仅是文件路径和名字,比如“this/is/the/file/path/on/server/with/filename.ext”。

第四对包server to client 告知流属性(广播标志/比特率)

 四回合之2个包to client;Len=152

0030                          01 00 00 00 ce fa 0b b0 88 00  .........M......

0040   00 00 4d 4d 53 20 11 00 00 00 05 00 00 00 00 00  ..MMS ..........

0050   00 00 00 00 00 00 0f 00 00 00 06 00 04 00 00 00  ................

0060   00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00  ................

0070   00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00  ................

0080   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0090   00 00 20 03 00 00 00 00 00 00 00 00 00 00 8e 10  .. .............

00a0   01 00 16 09 00 00 00 00 00 00 00 00 00 00 00 00  ................

00b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00        ..............

 

包头”解释:

l         01 00 00 00 ce fa 0b b0”是服务器端向客户端发包的“BOOB FACE”固定开头。以后你会看到每一个包都是如此开头的。8字节。

l         

l         06 00 04 00”, 指的是“Comm 2 bytes | Dir 2 bytes”。06 00Command数值。04 00Direction数值,这里的0x04指明服务器发往客户端。4字节。

 

06 00 04 00”之后,就是这个包的Body了。

“包体”解释:

l         00 00 00 00”,错误号。

l         01 00 00 00”,后面跟随的都是本次结构数据了。

l         01 00 00 00”,结果标志,4字节。

l         00 00 00 00 00 00 00 00”;

l         00 00 00 02”,广播标志。

l         00 00 00 00 00 00 00 00”,双精度的文件时间点。8字节。

l         00 00 00 00”,代表total pre-recorded media length in seconds, live = 0。因为我们这个是一个实况录像,所以是00 00 00 00

l         00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00”,16字节。

l         20 03 00 00”,用在media的包字节长度。4字节。0x0320也就是800个字节。

l         00 00 00 00”,代表total number of packets in media, live = 0xffffffff or 0x00。因为我们这个是一个实况录像,所以是00 00 00 00

l         00 00 00 00”;

l         8e 10 01 00”,代表流比特率最高速度,0x0001108e就是Bitrate: 69774 bps

l         16 09 00 00”,代表整个header的大小。0x0916代表2326字节。

l         之后是40字节的“00”。

 

       前面第6个包中的“00 00 00 02”,广播标志,是什么意思呢?

       对于“00 00”,指的是索引定位类型,有这么几个值:

n         0x00,没有索引可供定位。

n         0x80,有索引。

       对于“00 02”,广播类型,有这么几个值:

n         0x01,指预录制的广播;

n         0x02,指实况广播,Live的。

n         0x42,包含了脚本命令的presentation

 

6个包中的“01 00 00 00”,结果标志,是什么意思呢?

l         0x01,媒体文件路径和名字被接受,没有身份验证。

l         0x02BASIC验证媒体通过。

l         0x03NTLM验证通过。

我们本次下载不需要验证,所以是0x01



郑昀编写,随时更新。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【阿里云开发者学堂出品】2021大厂面试题500+免费赠送
无论是刚入职场的小白,还是想要升职加薪的开发者,都可领取的面试弹药
21 0
LINUX备份,使用再生龙Clonezilla成功,remastersys、systemback都失败
LINUX备份,使用再生龙Clonezilla成功,remastersys、systemback都失败
4 0
systemback慎用:安装后无法启动
systemback慎用:安装后无法启动
4 0
解决办法:nvidia-docker2指定最新docker,而安装又找不到
解决办法:nvidia-docker2指定最新docker,而安装又找不到
5 0
Spark机器学习实战 (十一) - 文本情感分类项目实战
Spark机器学习实战 (十一) - 文本情感分类项目实战
5 0
APF filter到底支持多复杂的条件
APF filter到底支持多复杂的条件
6 0
内核模块编译过程探秘
内核开发者刚刚入门时,都会学习写一个Hello World内核模块。这个内核模块中一定会包含一个Makefile文件。对于这个Makefile文件的内容和格式,几乎每个内核开发者都应该已经熟稔于心。
4 0
谷歌数据集搜索正式版出炉:全面升级,覆盖2500万数据集
谷歌数据集搜索正式版出炉:全面升级,覆盖2500万数据集
4 0
LINUX获得线程号、设置线程名
LINUX获得线程号、设置线程名
4 0
+关注
郑昀
☑移动数据业务×6年 ☑语义聚合×4年 ☑O2O×5年的一个老兵。
222
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载