Chromecast播放MPEG-DASH直播时遇到问题。由于清单中缺少UTCTiming标记,因此发生无限加载。已知ShakaPlayer会出现此问题。这是FAQ中的第一个问题:https://github.com/google/shaka-player/blob/master/docs/tutorials/faq.md
然而,在chromecast上,我无法直接访问ShakaPlayer(或者有一种我不熟悉的方式)。我能想到的问题有两种解决方案:
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播放器的行为,仍然会发生无限加载,我在这里做错了吗?
useLegacyDashSupport
使用较旧的播放器(媒体播放器库)可以正常播放chromecast播放流,但会稍微破坏UI。我可以仅在需要时动态切换到旧播放器吗?例如,基于清单,或者在发件人应用程序的loadRequest期间。答案 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是一项功能要求,可帮助您进行漂移。该功能着陆后,播放器将使用清单中的片段来猜测实时边缘,而不是使用时钟时间。这意味着您无需设置时钟同步。