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

标签 ios stream live quicktime television

我正在分析 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

我发现的授权过程:

  1. token.tvb.com 重定向到带有几个 GET 值的 vod 服务器
  2. VOD 服务器检查 GET 值并设置 cookie(如果有效)。同时响应m3u8文件(包含几个不同质量的流url)
  3. 播放器将在 m3u8 中请求一个或多个 url 以检索流。然后,VOD 服务器将检查 cookie 和用户代理作为 token 。
  4. 在接下来的时间里,玩家将继续使用 cookie 和 user-agent 作为 token 来请求 ts 文件。

附注来自 TVB for android 的 HLS 有不同的过程,我还没有弄清楚。但是我发现如果user-agent包含"Android"那么授权就会失败。

关于ios - QuickTime Player(或实际上是 CoreMedia)在播放 HTTP 流时如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785237/

相关文章:

c# - 从 http 地址读取 XML 文件

flash - 在Flex移动应用程序中处理多个音频流

php - 从手机上传的图片旋转90度? PHP

iOS 音乐流媒体和 HTTP 直播

ios - Swift - iOS NSPredicate 带有可选的 NSDecimalNumber

ios - 使用 DynamoDB -> 未找到资源

ios - iPhone 4 和 iPhone 5 之间的自动调整问题

ios - Swift ios 从 pickerView 获取选定值

java - try-with-resources 中的 DigestInputStream 是否会关闭原始 InputStream?

jquery - 使用 JQuery 获取 html 的实时高度?