Chromecast Receiver CAF,无限加载 MPEG-DASH 流,ShakaPlayer 访问

Posted

技术标签:

【中文标题】Chromecast Receiver CAF,无限加载 MPEG-DASH 流,ShakaPlayer 访问【英文标题】:Chromecast Receiver CAF, infinite loading of MPEG-DASH stream, ShakaPlayer access 【发布时间】:2018-06-04 12:40:14 【问题描述】:

Chromecast 播放 MPEG-DASH 直播时遇到问题。由于清单中缺少 UTCTiming 标签,会发生无限加载。众所周知,ShakaPlayer 会出现此问题。这是FAQ中的第一个问题:https://github.com/google/shaka-player/blob/master/docs/tutorials/faq.md

但是,在 chromecast 上,我无法直接访问 ShakaPlayer(或者可能有一种我不熟悉的方式)。我能想到的问题有两种解决方案:

    动态修改清单。
 this.playbackConfig.manifestHandler = (manifest) => 
    //将 UTCTiming 添加到具有如下属性的清单中:
    customUTC.setAttribute("schemeIdUri", "urn:mpeg:dash:utc:http-head:2014");
    customUTC.setAttribute("值", this.manifestUrl); 

但这并没有改变 chromecast 播放器的行为,仍然会出现无限加载,我在这里做错了吗?

    通过设置useLegacyDashSupport 使用旧版播放器(媒体播放器库)可以正常播放chromecast 流,但会稍微破坏UI。我可以仅在需要时动态切换到旧版播放器吗?例如,基于清单,或在来自发件人应用的 loadRequest 期间。

【问题讨论】:

【参考方案1】:

UTCTiming 元素是必需的,因为 Shaka Player 需要知道服务器上的时间,以便它可以在正确的时间播放。如果客户端和服务器的时钟时间不同,则视频可能无法播放。这不是Shaka Player的要求,而是DASH的一般要求。

但如果您无法在清单中设置元素,您可以使用manifest.dash.clockSyncUri(请参阅docs)配置参数来设置要使用的时钟同步 URL。例如:

player.configure(manifest: dash: clockSyncUri: 'https://example.com/clock');

请注意,用于时钟同步的 URL 需要在响应中包含正确的 Date 标头(注意缓存),如果请求是跨域的,则需要公开标头,否则将CORS 错误。

另外,shaka-player#999 是一个帮助漂移的功能请求。在该功能着陆后,播放器将使用清单中的片段来猜测实时边缘,而不是使用时钟时间。这意味着您不必设置时钟同步。

【讨论】:

【参考方案2】:

我同意你的看法。这是 shaka 强制使用 UTCTiming 的非常烦人的行为。

如果您可以选择在您的 fork 中修改 shaka-player 代码,我建议您在清单初始化 (check here) 后调用 setClockOffset 方法。清单具有具有 setClockOffset 方法的presentationTimeline。否则,您可以从here 访问清单。为 UTCTiming 触发 setClockOffset 方法。如果您无法为清单设置 UTCTiming,手动设置偏移量可能是您的最佳选择。

示例代码案例是 =>

player.load(manifestUri)
  .then(() => 
    const manifest = player.getManifest();
    const presentationTimeline = manifest.presentationTimeline;
    presentationTimeline.setClockOffset(10/* find a suitable offset */);
  );

祝你好运!

【讨论】:

以上是关于Chromecast Receiver CAF,无限加载 MPEG-DASH 流,ShakaPlayer 访问的主要内容,如果未能解决你的问题,请参考以下文章

chromecast流程中receiver.html的作用是啥?是必需的吗?

保护 Chromecast Receiver 应用程序

Chromecast 应用程序仅显示 Receiver 应用程序 URL

如何获取在 chromecast 设备上崩溃的 Receiver 应用程序的崩溃日志?

在 Chromecast Receiver 中利用基于 cookie 的身份验证

在 Styled Media Receiver Chromecast 上播放 M3U8