首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

20行代码解析出RTMP直播流真实地址

现在网上直播很多,直播流也有很多种方式,如:rtmp、http-flv、m3u8、mp4等。

我们经常想,如果能直接收看这个直播,看到自己喜欢能录像该多好啊,录屏好麻烦,而且效果不好?

而且有些直播会在某些特定时间只允许某些用户收看(你懂的),其他人会被挡在外面啦,有没有办法直接看呢?

今天给大家带来的就是,如何用20行代码实现rtmp直播流的地址获取并且录制视频(这可不是录屏哦,是直接将直播流保存,效果是最好的)

先看下效果:

首先:rtmp流是走的rtmp协议,而rtmp协议是TCP协议的上层协议,我们一般在浏览器network里面看到的请求都是基于tcp协议的HTTP协议。所以想直接从浏览器中获取直播地址是不好实现的。

怎么办呢?

那就需要我们的嗅探工具出马了,有哪些呢?python原生的socket、强大的scapy、divert都可以实现截获TCP包,我呢比较懒,懒的研究,懒的学习,就用了比较简单的divert来实现这个功能。

python版本的divert叫pydivert

安装方法:

下面我们就开始截获数据了。

divert并没有解析rtmp协议的功能,那我们就只能先解析它底层的TCP协议开始,rtmp协议使用的是1935端口。

在这里,我们截获的是TCP协议目标端口是1935,并且返回的payload不为空的包

返回的payload为下面这种bytes数据:

通过在wireshark里面分析,我们可以断定,rtmp流地址分两部分构成,

前部分为rtmp://xxxxxx,此部分在connect 中的tcUrl中

另一部分为一个子地址 ,此部分在play 中,

将前后两部分地址组合起来,就是一个完整的rtmp地址了,这两部分地址分别在两个请求中,而我们的目的就是将这两部分地址获取到.

此时我们就需要在TCP包的payload中过滤我们需要的部分了,

这里我用了一个无脑的方式,直接在里面查看connect和tcUrl,关键字,如果有的话,就使用正则表达式将tcUrl后面的部分提取出来,最后多我们获取到的字节串中取前两个字节计算url长度,直接截取对应长度即可.

而后半部分使用play关键词来过滤,同样计算出长度,截取对应长度的字节串

最终将两部分合并起来

这样,地址就获取到了,类似下面的地址:

这样,我们就已经成功了,至于如何播放,当然是用超级牛X 的开源的 VLC media player 了

在vlc中通过 媒体--打开网络串流--网络(贴地址)--播放 就可以看到啦

想要录制视频,好说啊,直接在视频界面右键--录像 ,视频会被放在 我的文档--我的视频 中>相当棒的工具.

另:

1、这个地址在某些平台上并不固定哦,前一秒种是一个地址、下一秒可能会变换为其他地址,只要在获取地址后马上在VLC中播放,不管地址如何变换都不会影响到你的观看(当然如果关闭VLC后,再用此地址可能就打不开了哦)

2、在一些平台会在一些时间只对部分特殊用户开放(你懂的),那只要你在能看到视频时截取到RTMP流地址并播放,当房间关闭时,并不会影响到你的观看哦(当然在一些平台会有一些其他限制,并不保证完全可以)。

注意:这里只对技术进行讨论,不要用它做非法活动哦。

个人对协议不怎么熟悉,所以代码只是简单的实现,勿有太高要求哦。

如果大家有兴趣,我将再补充下http-flv、m3u8、mp4等地址的嗅探方式,

也可以直接调用PYTHON版的VLC接口进行播放、录像等功能。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180809G0V5JP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券