RTHK直播抓取笔记
网上提供直播源的香港电视台除了TVB还有RTHK。
RTHK 是香港唯一的公营电视机构,有31和32两个免费电视台,而且最重要的是他们都提供了线上直播。
官方的播放地址是 https://www.rthk.hk/tv
按下 F12 可以看到视频使用的是jwplayer播放,指向一个内存blob。
所以,我们需要转去 Network 标签查看所有网络流量。
尝试直接访问以下:curl -s https://www.rthk.hk/feeds/dtt/rthktv31_https.m3u8
会得到如下输出:
|
|
当然,你直接拿着这个想像TVB那样直接302是不行的。因为 akamaihd.net
整个在中国大陆不可用,所以说需要代理一下。
这就涉及到了HLS的基本知识,有需要的可以去了解以下。这里需要知道的是,M3U8只是播放清单,真正负责播放的是ts文件。所以代理分为两步,获取真实M3U8内容,然后代理ts文件。
刚才我们获取到的M3U8文件是MasterPlaylist,负责提供多种解析度的。在这里我们选择清晰度最高的 https://rthklive1-lh.akamaihd.net/i/rthk31_1@167495/index_2052_av-p.m3u8?sd=10&rebase=on
进行代理。(根据搜索,这个地址早在18年就有人解析出来了,一直没有变,可见十分稳定。只不过因为akamaihd全线被墙,不能播放)
利用curl可以查看到以下内容:
|
|
我们要做的就是去代理ts文件,并且把M3U8中的地址换成我们自己的代理地址。
首先需要搞一个ts代理,很简单。
|
|
就是简单的获取参数,然后去读取数据,记住要原样传递 content-type
,正确传输body,其他不重要。
然后,我们来编写M3U8的代理。
M3U8文件是纯文本文件,所有控制信息以 #
开头,所以可以写一个逐行操作的程序,替换掉非 #
开头的URL。
基本代码如下:
|
|
然后就是很简单的组装环节了,要注意的是,VLC 播放器非常吃后缀名这个设定。所以TS文件必须.ts
结尾。要不然他会在日志里默默的打上一句”Nothing to play”,然后装傻不去播放。
最后的效果如下:
相关的代理我已经封装成库了,可以参看 https://github.com/zjyl1994/tvproxy ,觉得好用给个star啦。