15

我正在使用 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。在我的带有 iSight 摄像头和当前版本 Chrome 的 MacBook 上,Modernizr.getUserMedia 返回 true,然后 navigator.getUserMedia(...) 提示允许使用摄像头。出色的

但是,在另一台没有摄像头但使用当前版本的 Chrome 的机器上,Modernizr.getUserMedia 返回 true,这意味着 navigator.getUserMedia(...) 提示允许使用设备没有的摄像头。没那么优秀!

有谁知道是否可以检测到相机的存在?理想情况下,如果他们没有相机,我不想提示用户访问相机的权限!

干杯

弥敦道

4

5 回答 5

6

您可以使用 MediaStreamTrack.getSources。这将返回连接到 PC 的视频和音频设备列表。这不需要用户许可。

然后,您可以将 ID 传递给 getUserMedia 以获取所需的媒体设备。

于 2014-02-03T12:05:19.993 回答
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 ... 
    }
}
于 2014-03-05T08:21:22.317 回答
2

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值(名称)是什么。因为网络蠕虫。

于 2020-09-29T18:25:54.787 回答
0

getUserMedia API 仍然很新鲜,并且会有一些错误和需要改进的地方,比如这个问题。

但目前我没有办法让你检查计算机是否真的有摄像头。尽管您可以使用 Flash :-( 来检测它,但我认为...

于 2012-11-15T18:22:05.900 回答
0

您可以使用 Muaz Khan webrtc 实验中的 DetectRTC: https ://github.com/muaz-khan/WebRTC-Experiment/tree/master/DetectRTC

利用:

DetectRTC.audioInputDevices
DetectRTC.audioOutputDevices
DetectRTC.videoInputDevices

获取设备。

于 2016-02-22T14:45:38.350 回答