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

时间:2018-06-04 12:40:15

标签: chromecast google-cast mpeg-dash shaka

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

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

  1. 动态修改清单。
  2.  this.playbackConfig.manifestHandler = (manifest) => {
        //adding UTCTiming to the manifest with attributes like this:
        customUTC.setAttribute("schemeIdUri", "urn:mpeg:dash:utc:http-head:2014");
        customUTC.setAttribute("value", this.manifestUrl); }

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

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

2 个答案:

答案 0 :(得分:0)

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

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

示例代码案例将是=>

player.load(manifestUri)
  .then(() => {
    const manifest = player.getManifest();
    const presentationTimeline = manifest.presentationTimeline;
    presentationTimeline.setClockOffset(10/* find a suitable offset */);
  });
祝你好运!

答案 1 :(得分:0)

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

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

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

请注意,用于时钟同步的URL在响应上必须有正确的Date标头(请注意缓存),如果请求是跨源的,则需要在该标头处公开将是CORS个错误。

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