Javascript getUserMedia-如何检测设备是否实际有摄像头
我正在使用html5/javascript getUserMedia api编写一个js应用程序,如果可用,它将使用设备的摄像头。我正在使用Modernizer检测(浏览器的)功能,如下所示:Javascript getUserMedia-如何检测设备是否实际有摄像头,javascript,camera,getusermedia,modernizr,mediadevices,Javascript,Camera,Getusermedia,Modernizr,Mediadevices,我正在使用html5/javascript getUserMedia api编写一个js应用程序,如果可用,它将使用设备的摄像头。我正在使用Modernizer检测(浏览器的)功能,如下所示: if (Modernizr.getusermedia) { 在真块中: navigator.getUserMedia( { // we would like to use video but not audio // This object is browser API sp
if (Modernizr.getusermedia) {
在真块中:
navigator.getUserMedia(
{ // we would like to use video but not audio
// This object is browser API specific! - some implementations require boolean properties, others require strings!
video: true,
audio: false
},
function(videoStream) {
// 'success' callback - user has given permission to use the camera
// my code to use the camera here ...
},
function() {
// 'no permission' call back
console.log("user did not give access to the camera");
}
);
这个很好用。但我发现Modernizer.getUserMedia调用返回true的依据是支持api的浏览器,而不是设备是否真的有摄像头
例如,在我的带有iSight摄像头和当前Chrome版本的MacBook上,Modernizr.getUserMedia返回true,然后navigator.getUserMedia(…)提示获得使用摄像头的权限。极好的
但是,在另一台没有摄像头但使用当前版本的Chrome的机器上,Modernizr.getUserMedia返回true,这意味着navigator.getUserMedia(…)会提示用户允许使用设备没有的摄像头。不太好
有人知道是否有可能检测到摄像机的存在吗?理想情况下,如果用户没有摄像头,我不想提示用户访问摄像头的权限
干杯
NathangetUserMedia API还没有出版,还存在一些bug和需要改进的地方,比如这个问题
但目前我看不出有什么方法可以让你检查电脑是否真的有摄像头。尽管您可以使用Flash:-(我认为…您可以使用MediaStreamTrack.getSources。这将返回连接到PC的视频和音频设备的列表。这不需要用户权限 然后,您可以将ID传递给getUserMedia以获取所需的媒体设备。这对我有帮助:
function(videoStream) {
// 'success' callback - user has given permission to use the camera
if (videoStream.getVideoTracks().length > 0) {
// my code to use the camera here ...
}
}
您可以使用Muaz Khan webrtc实验中的DetectRTC: 使用:
获取de设备。导航器。mediaDevicesAPI在过去五年左右已经稳定下来 现在可以从浏览器javascript执行此操作
{
navigator.mediaDevices.enumerateDevices()
.then ( function (devices) {
console.log(devices)
const videoDevices = devices.filter(device => device.kind === 'videoinput')
console.log(videoDevices)
})
}
如果您的机器有任何视频设备,则在过滤设备
阵列后,您将在视频设备
阵列中返回一些内容
但是,除非你的程序已经调用了
getUserMedia()
并获得了许可,否则你(至少在谷歌Chrome上)无法知道你有多少个摄像头,或者它们的标签(名称)是什么。因为网络爬行。调用了哪个回调(使用哪些参数)当您允许它在没有摄像头的设备上运行时?会调用成功回调,但我还没有检查arg(上面代码中的视频流)是否为空。这是一个好问题,我应该检查一下。我将很快进行检查,并让您知道…MediaStreamTrack.getSources已被删除,不再受支持。
{
navigator.mediaDevices.enumerateDevices()
.then ( function (devices) {
console.log(devices)
const videoDevices = devices.filter(device => device.kind === 'videoinput')
console.log(videoDevices)
})
}