Ios 在播放HTTP流时QuickTime Player(或实际上是CoreMedia)是如何工作的?

Ios 在播放HTTP流时QuickTime Player(或实际上是CoreMedia)是如何工作的?,ios,stream,live,quicktime,television,Ios,Stream,Live,Quicktime,Television,我在分析TVB(香港)的直播电视流媒体 众所周知,要观看它们的url有: 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 我们可以在任何苹果原生软件(如QuickTime、Safari)中直接通过上面的url观看,

我在分析TVB(香港)的直播电视流媒体

众所周知,要观看它们的url有:

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
我们可以在任何苹果原生软件(如QuickTime、Safari)中直接通过上面的url观看,无论是Mac还是iOS。也知道他们正在使用AppleComedia框架。但它在其他平台上不起作用。您将获得HTTP 200,但内容中的“访问被拒绝”。 我分析了所有关于它的流量。我发现(由CoreMedia)到端点(服务器真正提供视频)的HTTP请求包含一个标头:

x-playback-session-id: xxxxx
无论用户代理是什么,在我手动添加标题(我在Chrome或Firefox中尝试过)后,视频到达,而不是“拒绝访问”消息。但出现的问题是,在我转储的流量中,我找不到任何其他地方在以前的请求中包含此标头(因为它重定向了几次)。所以我很好奇AppleMediaCore在播放http流时做了什么?它计算了会话id(或散列)还是从我错过的某个地方得到了id


p、 我不确定TVB是否进行IP检查。因为他们有版权或法律问题,所以可能被阻止从某处访问。你可能需要一个VPN。

我终于找到了答案。x-playback-session-id是来自AVPlayer框架的UUID。但事实上,这不会影响我是否得到代币。真正的令牌是HTTP cookie

我发现的授权流程:

  • token.tvb.com重定向到vod服务器,带有两个GET value
  • VOD服务器检查GET值并设置cookie(如果有效)。还响应m3u8文件(包含多个不同质量的流url)
  • 播放器将请求m3u8中的一个或多个url来检索流。然后,VOD服务器将cookie和用户代理作为令牌进行检查
  • 在接下来的时间里,玩家将继续使用cookie和用户代理作为令牌来请求ts文件
  • p、 TVB android版的s.HLS有不同的流程,我还没有弄清楚。但我发现,如果用户代理包含“Android”,那么授权就会失败