我正在分析 TVB(HK) 的直播电视流
众所周知的观看它们的网址是:
http://token.tvb.com/stream/live/hls/mobilehd_hdj.smil
http://token.tvb.com/stream/live/hls/mobilehd_j2.smil
http://token.tvb.com/stream/live/hls/mobilehd_inews.smil
无论是Mac还是iOS,我们都可以在任何苹果原生软件(如QuickTime、Safari)中通过上面的url直接观看。并且还知道他们正在使用 AppleCoreMedia 框架。但它不适用于其他平台。您将收到 HTTP 200,但内容中“访问被拒绝”。 我分析了所有关于它的流量。我发现对端点(服务器真正提供视频)的 HTTP 请求(由 CoreMedia)包含一个 header :
x-playback-session-id: xxxxx
无论用户代理是什么,在我手动添加 header (我在 Chrome 或 Firefox 中尝试过)后,视频都到达了,而不是“访问被拒绝”消息。但出现的问题是,我在我转储的流量中找不到任何其他位置包含早期请求中的此 header (因为它重定向了几次)。所以我很好奇AppleMediaCore在播放http流时做了什么?它是否计算了 session id(或哈希值),或者从我错过的某个地方获取了 id?
附注我不确定 TVB 是否进行 IP 检查。由于他们有版权或法律问题,因此可能无法从某个地方访问。您可能需要一个 VPN。
最佳答案
我终于找到了答案。 x-playback-session-id 是来自 AVPlayer Framework 的 UUID。但实际上这并不影响我是否获得 token 。真正的标记是 HTTP cookie。
我发现的授权过程:
- token.tvb.com 重定向到带有几个 GET 值的 vod 服务器
- VOD 服务器检查 GET 值并设置 cookie(如果有效)。同时响应m3u8文件(包含几个不同质量的流url)
- 播放器将在 m3u8 中请求一个或多个 url 以检索流。然后,VOD 服务器将检查 cookie 和用户代理作为 token 。
- 在接下来的时间里,玩家将继续使用 cookie 和 user-agent 作为 token 来请求 ts 文件。
附注来自 TVB for android 的 HLS 有不同的过程,我还没有弄清楚。但是我发现如果user-agent包含"Android"那么授权就会失败。
关于ios - QuickTime Player(或实际上是 CoreMedia)在播放 HTTP 流时如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785237/