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

Pul*_*Lab 39 javascript html5 webrtc

我正在尝试使用WebRTC在屏幕上显示视频输入作为实时馈送.我不是要尝试任何点对点通信或类似的东西,只是显示视频源.

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

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

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

在FireFox中,同样找到了设备,但是任何使用getUserMedia连接到它的尝试都会触发错误回调,并出现HARDWARE_UNAVAILABLE错误.

我的getUserMedia电话很简单:

navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback);
Run Code Online (Sandbox Code Playgroud)

我的成功回调是(包括一些测试代码MediaStreamTrack立即检查,一秒后检查):

function _webRTCsuccessCallback(stream) {
    window.stream = stream; // stream available to console
    if (window.URL) {
        _video.src = window.URL.createObjectURL(stream);
    } else {
        _video.src = stream;
    }
    var tracks = stream.getVideoTracks();
    if (tracks[0]) {
        console.log(tracks[0]);
        setTimeout(function () { console.log(tracks[0]); }, 1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Firefox版本31.0

Chrome版本39.0.2171.71米

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

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

源相机:松下NV-DS35B(数码摄像机)

有没有人有任何想法导致这个,以及为什么WebRTC不会用这个设备玩球?

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

Dav*_*ain 2

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

换句话说,如果 MST 既未静音又已启用,媒体只能从源流出。

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

启用/禁用状态决定轨道是否输出媒体。

确保没有其他应用程序正在使用您的源设备。就您而言,StarTech 转换器。当您尝试在浏览器中 getUserMedia 时,请关闭所有可能访问您的捕获设备的其他应用程序。

请访问此工作草案,了解有关 MST 生命周期和流程的更多信息。

另一个问题可能是您的设备不提供满足媒体轨道上的限制的媒体。您的设备能够传输 NTSC 和 PAL 视频信号。因此,尝试调整 getUserMedia 的约束,例如 PAL 信号,如下所示:

{ 
  audio: false,
  video: {
    mandatory: {
      maxWidth: 768,
      maxHeight: 576,
      maxAspectRatio: 1.333,
      maxFrameRate: 25
  }
}
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。