Firefox:drawImage(视频)因NS_ERROR_NOT_AVAILABLE而失败:组件不可用

时间:2013-09-02 21:14:58

标签: javascript firefox video canvas getusermedia

尝试使用其源为网络摄像头Feed的drawImage来呼叫video似乎在Firefox中失败了 NS_ERROR_NOT_AVAILABLE: Component is not available

我试图等待视频代码触发的每个事件:playplayingcanplayloadeddataloadedmetadata等等,没有任何作用。这似乎是因为在将流正确加载到<video>元素之前这些事件正在触发。

JSFiddle with error(您可以在控制台中查看错误)

副作用是视频的宽度和高度也不正确。

1 个答案:

答案 0 :(得分:32)

这是Firefox中的bug。最简单的解决方法是简单地继续尝试,直到错误消失,因为没有事件在正确的时间触发。

请参阅:http://jsfiddle.net/9aT63/25/

基本上,您必须将drawImage调用包装在try / catch块中。

function drawVideo() {
  try {
    $vidCanvasCtx.drawImage($vid, 0, 0, $vidCanvas.width, $vidCanvas.height);
    ...
  } catch (e) {
    if (e.name == "NS_ERROR_NOT_AVAILABLE") {
      // Wait a bit before trying again; you may wish to change the
      // length of this delay.
      setTimeout(drawVideo, 100);
    } else {
      throw e;
    }
  }
}