【问题标题】:WebRTC can't get a video feed from a USB input device (readyState goes to ended)WebRTC 无法从 USB 输入设备获取视频源(readyState 结束)
【发布时间】:2015-01-26 06:25:16
【问题描述】:

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

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

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

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

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

我的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)

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

有没有人知道是什么原因造成的,为什么 WebRTC 不能用这个设备打球?

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

【问题讨论】:

  • 什么相机和什么操作系统?您可能需要在浏览器的相应错误跟踪器中发布错误。
  • @BenjaminTrent 谢谢 - 编辑了我的问题以添加操作系统和相机信息。我担心它可能最终会进入浏览器跟踪器,但 Chrome 和 Firefox 似乎都不想知道我只是想知道这是否是我正在做的事情,而不是两个浏览器中的类似问题,任何比我更精通 WebRTC 的人都可以提供我错过的任何东西!例如。那些浏览器中的 webRTC 是否不喜欢某些类型的输入,例如PAL 也许?
  • @PulseLab:您能否确认您是否为 StarTech SVID2USB2NS 和 Panasonic NV-DS35B 安装了最新的驱动程序?
  • 嗨@SyedQarib,是的,我确实安装了StarTech 设备的最新驱动程序。 Panasonic 相机本身没有任何驱动程序,它只是一个通过 StarTech 设备连接的 S-Video 输出。 Windows 看不到 StarTech 设备的另一端有什么,就它而言,StarTech“是”有问题的相机......
  • 您是否尝试过使用其他 WebRTC 服务,例如 opentokrtc.com/ok

标签: javascript html webrtc


【解决方案1】:

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

换句话说,只有在 MST 未静音和启用的情况下,媒体才能从源流出。

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

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

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

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

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

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

希望能有所帮助。

【讨论】:

  • 有没有办法让 otg usbwebcam 作为 chrome mobile 上的视频输入。?我只看到智能手机嵌入的前后摄像头......
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多