我正在尝试使用 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 来获取视频源,并且它可以很好地收集源 - 我欣赏不同的技术,但它确实给了我证据表明该设备在那里并且正在发送视频!)