我正在使用html5 / javascript getUserMedia api编写一个js应用程序,该应用程序将使用该设备的相机(如果可用)。我正在使用Modernizr来检测(浏览器)功能,如下所示:
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调用基于支持api的浏览器返回true,而不是设备是否实际上有相机。
IE。在我的MacBook上使用iSight摄像头和当前版本的Chrome,Modernizr.getUserMedia返回true,然后navigator.getUserMedia(...)提示您使用摄像头。优异的
但是,在没有相机但使用当前版本的Chrome的另一台机器上,Modernizr.getUserMedia返回true,这意味着navigator.getUserMedia(...)提示允许使用设备没有的相机。不太好!
是否有人知道是否有可能检测到相机的存在?理想情况下,如果用户没有相机,我不想提示用户访问相机!
干杯
森
答案 0 :(得分:6)
您可以使用MediaStreamTrack.getSources。这将返回连接到PC的视频和音频设备列表。这不需要用户许可。
然后,您可以将ID传递给getUserMedia以获取所需的媒体设备。
答案 1 :(得分:3)
这对我有所帮助:
function(videoStream) {
// 'success' callback - user has given permission to use the camera
if (videoStream.getVideoTracks().length > 0) {
// my code to use the camera here ...
}
}
答案 2 :(得分:0)
getUserMedia API仍然非常新鲜,并且会有一些错误和需要改进的地方,比如这个问题。
但目前我没有办法检查计算机是否真的有摄像头。虽然你可以使用Flash :-(检测它,我认为......
答案 3 :(得分:0)
你可以使用Muaz Khan webrtc实验中的DetectRTC: https://github.com/muaz-khan/WebRTC-Experiment/tree/master/DetectRTC
使用:
DetectRTC.audioInputDevices
DetectRTC.audioOutputDevices
DetectRTC.videoInputDevices
获取设备。
答案 4 :(得分:0)
navigator.mediaDevices
api在过去的大约十年中已经稳定。
您现在可以通过浏览器javascript执行此操作。
{
navigator.mediaDevices.enumerateDevices()
.then ( function (devices) {
console.log(devices)
const videoDevices = devices.filter(device => device.kind === 'videoinput')
console.log(videoDevices)
})
}
如果您的计算机上有任何视频设备,则在过滤videoDevices
数组后,您会在devices
数组中得到一些东西。
但是,除非您的程序已经调用getUserMedia()
并获得许可,否则您(至少在Google Chrome浏览器中)无法知道您拥有多少个网络摄像头或它们的label
值(名称)是多少。因为网络蠕变。