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

2024-03-20

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

我的代码对于我的笔记本电脑集成网络摄像头工作得很好,但是当我连接外部视频输入设备(在本例中是一台旧摄像机,使用 StarTech 转换器通过 S-Video 连接到 USB 输入 - 型号 SVID2USB2NS)时,我什么也得不到。我已经在 Chrome 和 FireFox 中尝试过此操作。

两个浏览器都会找到视频设备,并为我提供集成网络摄像头或 USB 设备(在本例中列为“USB 2820”)的选择,因此它们在本例中知道该设备。

在 Chrome 中,当我尝试连接时,如果我 .getVideoTracks() 找到,则会调用 getUserMedia 调用的“成功”回调MediaStreamTrack,以及回调的时刻,MediaStreamTrack回报enabled = true and readyState = live。但是没有视频输入(只有黑色视频面板,并且 Chrome 浏览器选项卡中没有出现红色小“录制”图标)。如果我稍后检查 MediaStreamTrack,我发现readyState now = "ended“(尽管启用仍然是正确的)。

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

My getUserMedia调用很简单:

navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback);

我的成功回调是(包括一些测试代码来检查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);
    }
}

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

火狐浏览器版本 31.0

Chrome版本39.0.2171.71 m

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

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

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

有谁知道是什么原因造成的,以及为什么 WebRTC 无法与此设备配合使用?

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


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

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

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

The 启用/禁用state 确定轨道是否输出媒体。

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

访问这个工作草案 http://www.w3.org/TR/2015/WD-mediacapture-streams-20150414/#life-cycle-and-media-flow有关 MST 生命周期和流程的更多信息。

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

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

希望能有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebRTC 无法从 USB 输入设备获取视频源(readyState 转为结束) 的相关文章