WebRTC无法从USB输入设备获取视频(readyState转到结束)

时间:2014-11-27 15:42:29

标签: javascript html5 webrtc

我尝试使用WebRTC在屏幕上显示视频输入作为实时Feed。我没有尝试进行任何点对点通信或类似的事情,只是显示视频源。

我的笔记本电脑集成网络摄像头的代码工作得很好,但是当我连接外部视频输入设备时(在这种情况下,通过S-Video连接的旧摄像机使用StarTech转换器连接到USB输入 - 型号SVID2USB2NS)一无所获。我已经在Chrome和FireFox中试过这个。

两种浏览器都可以找到视频设备并为我提供集成网络摄像头或USB设备的选择(在这种情况下列为" USB 2820和#34;在这种情况下,他们都知道设备)。

在Chrome中,当我尝试连接时,"成功"调用getUserMedia调用的回调,如果我.getVideoTracks()我找到了MediaStreamTrack,并且回调的那一刻,MediaStreamTrack返回enabled = true和{ {1}} = readyState。但是没有视频输入(只有一个黑色的视频面板,并且Chrome浏览器标签中的小红色"录制"图标不会出现)。如果我稍后检查MediaStreamTrack,我会发现live现在=" readyState" (虽然启用仍然是真的)。​​

在FireFox中,再次找到设备,但是任何使用getUserMedia连接到它的尝试都会触发错误回调,并发生HARDWARE_UNAVAILABLE错误。

我的ended电话只是:

getUserMedia

我的成功回调是(包括一些测试代码立即检查navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback); ,一秒后检查):

MediaStreamTrack

(其中_video是页面上的html5对象)

Firefox版本31.0

Chrome版本39.0.2171.71 m

操作系统版本:Windows 7旗舰版(6.1.7601)SP1

S-Video转USB转换器:StarTech SVID2USB2NS(http://www.startech.com/AV/Converters/Video/USB-S-Video-Capture-Cable~SVID2USB2NS

源摄像头:Panasonic NV-DS35B(数码摄像机)

有没有人有任何想法导致这种情况,以及为什么WebRTC不会在这个设备上打球?

(更一般地说,我知道设备正在向PC发送视频信号,因为在IE中我已经开发了一个使用DirectShow来获取视频源的ActiveX控件,并且它收集了很好的源 - 不同的技术我很感激,但它确实证明设备在那里并发送视频!)

1 个答案:

答案 0 :(得分:2)

媒体捕获流的规范指出,在MediaStreamTrack的生命周期中,如果MST已被静音,则实时状态可以被零信息内容替换。或者"禁用"。这将导致渲染黑帧。

换句话说,如果MST同时取消静音并启用,则媒体只能从源流出。

静音/取消静音状态反映源是否提供任何媒体。

启用/禁用状态确定曲目是否输出媒体。

确保没有其他应用程序正在使用您的源设备。在你的情况下StarTrack转换器。当您尝试在浏览器中获取用户媒体时,请关闭可能访问您的捕获设备的所有其他应用程序。

有关MST生命周期和流程的更多信息,请访问此Working Draft

另一个问题可能是您的设备无法提供符合媒体轨道上存在的限制的媒体。您的设备能够提供NTSC和PAL视频信号。因此,请尝试调整getUserMedia的约束,例如对于PAL信号如此:

{ 
  audio: false,
  video: {
    mandatory: {
      maxWidth: 768,
      maxHeight: 576,
      maxAspectRatio: 1.333,
      maxFrameRate: 25
  }
}

希望有所帮助。