前言

最近在学习rtmp协议,虽然文档上对rtmp的握手过程和协议结构都讲得很清楚,但不看到实实在在的数据,心里还是没有底啊,所以今天尝试抓个包看看,因为我们正在做一个直播项目,所以想抓主播或者观众的包都是很容易的哈。

WireShark + XQuartz

升级到最新版的wireShark(Version 2.2.3)
升级到最新版的XQuartz(2.7.11)

监听手机网卡

获取到手机的udid,然后再命令行执行下面的命令:

rvictl -s udid

然后wireshark首页网卡列表会显示当前手机的网卡,如下图:

双击进入,界面上应该就有手机当前的一些网络包了

添加rtmp过滤器

因为我们只需要看rtmp相关数据包,所以我们新建一个过滤器,wireshark提供了方便的入口

点击上图右上角的表达式按钮,进入新建过滤器界面

然后搜索rtmpt 这个要多一个t 因为rtmp字段被另外一个协议占用了。

然后选中当前搜索结果,点击OK,过滤器就添加好了。

开始抓包

一切准备完毕,现在可以开始抓包了。

主播端

新建一个直播间,正常直播就可以了。下面是主播端的抓包数据

可以清楚的看到握手的过程和每个数据包。

观众端

点开一个正在直播的直播间。

可以看到,观众在握手成功后,向服务器发送了个play的指令。这也解惑了我之前的观众端如何开始拉流的疑问。

只要愿意动手,抓包原来很简单。

via.http://llyblog.com/2017/03/21/%E4%BD%BF%E7%94%A8WireShark%E6%8A%93%E5%8F%96RTMP%E5%8D%8F%E8%AE%AE%E5%8C%85/