2021年9月19日 星期日

如何用 Chrome 抓電視台直播源(2)-Video m3u8 Sniffer

如何用 Chrome 抓電視台直播源(2)-Video m3u8 Sniffer

 

現今,很多實時視頻串流服務,例如電視直播之類,大都會使用 m3u8 格式,而不是使用 mp4 等格式。要獲取這類的串流URL,我以前喜歡會用 Chrome + 猫抓,或是 FireFox + The Stream Dector。可惜,猫抓最近被 Chrome 禁了,於是我便不得不另尋新徑:改用 Chrome + Video m3u8 Sniffer。Video m3u8 Sniffer 是一個 Chrome 的擴展程序,可以從 chrome web store上安裝。


我喜歡獲取視頻串流 URL的原因,主要是想跳過網站的附加內容,例如廣告或彈出窗口等。


用來觀看這類 m3u8 串流的最簡單工具就是另一個 Chrome 的擴展程序:Play HLS。如果你啟用了 Play HLS 擴展,每當你偵察得 m3u8 串流時,單擊之,視頻便會自動在 Play HLS 上播放了。


我就喜歡使用其他視頻播放器,例如VLC、SMPlayer來播放,這樣一來可以錄制,又或將所獲得的主要是(TV URL)編錄成一個 Playlist ,以便隨時觀看。


如何抓得串流URL

以有線新聞台為例(http://teslagram.com/

當有線新聞台正在播放時,畫面頂部便會出現所抓得的 URL,如下圖

只要點擊之,視頻便會同時在 Play HLS 上播放,又或將之 drag and drop 到 VLC 上播放。



URL 地址被屏敝了,如何是好?這時我們只需將網頁稍為向上拉動,然後點一點視頻內位置,那個紅色的 Bar 便會收起。

另我們也可以點擊Video m3u8 Sniffer 的 icon 
以下視窗便會彈出。


我們會看見有兩個URL 地址,有時候兩個地址都合用,​有時候就只得一個地址合用。



什么是M3U8?
先从M3U说起,它是一种播放多媒体列表的文件格式,它的设计初衷是为了播放音频文件,比如MP3,但是越来越多的软件现在都用来播放视频文件列表。很多播放器和软件都支持M3U文件格式。M3U8是Unicode版本的M3U,用UTF-8编码。”M3U”和”M3U8″文件都是苹果公司使用的HTTP Live Streaming (HLS) 格式的基础,这种格式可以在iPhone和Macbook等设备播放。简而言之,M3U8就是一个播放列表。



m3u8视频格式简介
m3u8 视频格式原理:将完整的视频拆分成多个 .ts 视频碎片,.m3u8 文件详细记录每个视频片段的地址。
视频播放时,会先读取 .m3u8 文件,再逐个下载播放 .ts 视频片段。
常用于直播业务,也常用该方法规避视频窃取的风险。加大视频窃取难度。


鉴于 m3u8 以上特点,无法简单通过视频链接下载,需使用特定下载软件。
但软件下载过程繁琐,试错成本高。
使用软件的下载情况不稳定,常出现浏览器正常播放,但软件下载速度慢,甚至无法正常下载的情况。
软件被编译打包,无法了解内部运行机制,不清楚里面到底发生了什么。


HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。


简而言之,HLS 是新一代流媒体传输协议,其基本实现原理为将一个大的媒体文件进行分片,将该分片文件资源路径记录于 m3u8 文件(即 playlist)内,其中附带一些额外描述(比如该资源的多带宽信息···)用于提供给客户端。客户端依据该 m3u8 文件即可获取对应的媒体资源,进行播放。

因此,客户端获取 HLS 流文件,主要就是对 m3u8 文件进行解析操作。