1

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

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

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

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

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

2 回答 2

1

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

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

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

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

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

于 2018-07-25T17:18:46.380 回答
0

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

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

示例代码案例是 =>

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

祝你好运!

于 2018-06-15T08:08:30.643 回答