处理基于网络的发件人中的 Chromecast 加载错误

Handling Chromecast load errors in web-based sender

基于网络的 Chromecast 发送器的文档说 castSession.loadMedia() returns 一个承诺。因此,我应该能够像这样在异步函数中捕获错误:

const castSession = cast.framework.CastContext.getInstance().getCurrentSession();

const mediaInfo = new chrome.cast.media.MediaInfo(
  'https://example.com/stream.m3u8',
  'application/vnd.apple.mpegurl'
);

const loadRequest = new chrome.cast.media.LoadRequest(mediaInfo);

try {
  await castSession.getSessionObj().loadMedia(loadRequest);
} catch(e) {
  console.error(e);
}

不幸的是,这不起作用。无论我遇到什么加载错误,似乎都会在下载 HLS 清单和播放之前的某个时间发生。 loadMedia() promise 成功解决,因此没有要捕获的错误。发件人的开发者控制台出现错误:

cast_sender.js:85 Uncaught TypeError: d is not a function
    at cast_sender.js:85
    at V.onMessage (cast_sender.js:91)
    at S.h (cast_sender.js:71)
(anonymous) @ cast_sender.js:85
V.onMessage @ cast_sender.js:91
S.h @ cast_sender.js:71

显然,某种错误正在返回给客户端,似乎应该有一些未设置的事件处理程序,但我没有看到任何有关如何捕获错误的文档。

如何捕获媒体加载错误、一般媒体错误以及 Chromecast 发送器上的任何其他错误?

chrome.cast.Sessioncast.framework.CastSession是不同的。 CastSession 方法 returns 承诺,Session 对象与回调一起工作。调用session.loadMedia()

时缺少回调导致的错误

在您的情况下,您必须检查 chrome.cast.Session 对象的文档以进行进一步操作,或者通过从 CastSession 对象直接调用 loadMedia 来继续您的工作:

选项 1:继续使用 CastSession 对象:

try {
  await castSession.loadMedia(loadRequest);
} catch(e) {
  console.error(e);
}

选项 2:使用 Session 对象

try {
  const sessionObj = await castSession.getSessionObj();
  await (new Promise((res) => {
    sessionObj.loadMedia(loadRequest, res);
  }));
} catch(e) {
  console.error(e);
}

更多信息:

https://developers.google.com/cast/docs/reference/chrome/cast.framework.CastSession https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Session