未处理的拒绝(AbortError):用户代理根据用户的请求中止了媒体资源的获取过程

Say*_*man 6 javascript

https://onoumenon.gitbook.io/wiki/programming/tips/rtmp

  buildPlayer() {
    if (this.player || !this.props.stream) {
      return;
    }
    const { id } = this.props.match.params;
    this.player = flv.createPlayer({
      type: "flv",
      url: `http://localhost:8000/live/${id}.flv`
    });
    this.player.attachMediaElement(this.videoRef.current);
    this.player.load();
  }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此代码将视频流式传输给用户,但如果没有流并且应用程序崩溃,则会出现错误。

未处理的拒绝(AbortError):用户代理根据用户的请求中止了媒体资源的获取过程。

当我尝试执行此操作时,会引发错误:

player.attachMediaElement(videoRef.current);
Run Code Online (Sandbox Code Playgroud)

有没有办法检查这一行是否会抛出错误?

Dav*_*ruz 12

此类错误 ( Unhandled Rejection) 告诉我们您有一个被拒绝的 Promise,但未得到正确处理。

Promise 是异步的,错误也会异步发生。

根据库文档(此处),返回 Promise 的唯一方法是 methodplay

所以我猜你可能play在代码的不同部分调用方法。您需要捕获那里的错误,如下所示:

flvPlayer.play().catch((e)=>{
   /* error handler */
})
Run Code Online (Sandbox Code Playgroud)

  • 我实际上没有调用播放,只调用加载,我让用户单击播放。奇怪的... (3认同)
  • 我从未使用过这个库,但这个错误肯定与未处理的被拒绝的承诺有关。也许这正在图书馆内部发生。我查看了他们的文档,似乎还有另一种方法可以通过事件捕获这些错误: `flvPlayer.on(flvjs.Events.ERROR, (errorType, errorDetail, errorInfo) => { console.log('errorType: ', errorType); console.log('errorDetail:', errorDetail); console.log('errorInfo:', errorInfo); }); ` (2认同)