我正在尝试使用WebRTC在屏幕上显示视频输入作为实时提要。我不想做任何点对点通信或类似的事情,只是显示一个视频提要
我的代码适用于我的笔记本电脑集成网络摄像头,但当我连接外部视频输入设备(在本例中,是一台使用StarTech转换器通过S-video连接到USB输入的旧摄像机-型号SVID2USB2NS)时,我什么也得不到。我在Chrome和FireFox上都试过了
这两种浏览器都可以找到视频设备,并为我提供集成网络摄像头或USB设备的选择(在本例中列为“USB 2820”),因此在本例中,它们都知道该设备
在Chrome中,当我尝试连接时,如果我.getVideoTracks()找到MediaStreamTrack,调用getUserMedia调用的“success”回调,并且在回调的时刻,MediaStreamTrack返回enabled=true和readyState=live。但是没有视频输入(只有一个黑色的视频面板,Chrome浏览器选项卡上的红色“录制”图标没有出现)。如果我稍后检查MediaStreamTrack,我会发现readyStatenow=“ended”(尽管enabled仍然为true)
在FireFox中,同样可以找到该设备,但任何使用getUserMedia连接该设备的尝试都会触发错误回调,并出现硬件不可用错误
我的getUserMedia调用很简单:
navigator.getUserMedia({audio:false,video:true},\u webrtcsccesscallback,\u webrtcrorcallback);
我的成功回调是(包括一些测试代码,用于立即和一秒钟后检查MediaStreamTrack):
函数\u WebRTCCessCallback(流){
window.stream=stream;//可用于控制台的流
if(window.URL){
_video.src=window.URL.createObjectURL(流);
}否则{
_video.src=流;
}
var tracks=stream.getVideoTracks();
如果(磁道[0]){
console.log(tracks[0]);
setTimeout(函数(){console.log(tracks[0]);},1000);
}
}
(其中_video是页面上的html5对象)
Firefox 31.0版
Chrome版本39.0.2171.71 m
操作系统版本:Windows7Ultimate(6.1.7601)SP1
S-Video-to-USB转换器:StarTech SVID2USB2NS(http://www.startech.com/AV/Converters/Video/USB-S-Video-Capture-Cable~SVID2USB2NS)
源摄像机:松下NV-DS35B(数码摄像机)
有没有人知道是什么原因导致了这种情况,以及为什么WebRTC不会使用这种设备
(更一般地说,我知道该设备正在向PC发送视频信号,就像在IE中一样,我开发了一个ActiveX控件,它使用DirectShow获取视频源,它可以很好地收集视频源-我欣赏不同的技术,但它确实给了我证据,证明该设备在那里并发送视频!)
媒体捕获流规范规定,在MediaStreamTrack的生命周期内,如果MST被“静音”或“禁用”,则活动状态可能被零信息内容所取代。这将导致呈现黑色帧
换句话说,只有当MST同时处于非静音和启用状态时,媒体才能从源中流出
静音/取消静音状态反映源是否提供任何媒体
启用/禁用状态决定曲目是否输出媒体
确保没有其他应用程序正在使用源设备。在你的例子中,是星轨转换器。当您尝试在浏览器中获取UserMedia时,关闭所有可能访问您的捕获设备的其他应用程序
有关MST生命周期和流程的更多信息,请访问此工作草案
另一个问题可能是您的设备没有提供满足媒体轨道上存在的限制的媒体。您的设备能够传输NTSC和PAL视频信号。因此,尝试调整getUserMedia的约束条件,例如PAL信号,如下所示:
{
音频:错,
视频:{
强制性:{
最大宽度:768,
最大高度:576,
maxAspectRatio:1.333,
最大帧速率:25
}
}
希望这能有所帮助