getUserMedia - 如何检测设备是否确实有摄像头

Nat*_*ell 13 javascript camera modernizr

我正在使用html5/javascript getUserMedia api编写一个js应用程序,如果可用的话,它将使用设备的相机.我正在使用Modernizr来检测(浏览器的)功能,如下所示:

if (Modernizr.getusermedia) {
Run Code Online (Sandbox Code Playgroud)

并在真正的块内:

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");
    }               
);
Run Code Online (Sandbox Code Playgroud)

这很好用.但我发现,Modernizer.getUserMedia调用基于支持api的浏览器返回true,而不是设备是否实际上有相机.

IE浏览器.在我的MacBook上使用iSight摄像头和当前版本的Chrome,Modernizr.getUserMedia返回true,然后navigator.getUserMedia(...)提示您使用摄像头.优秀

但是,在没有相机但使用当前版本的Chrome的另一台机器上,Modernizr.getUserMedia返回true,这意味着navigator.getUserMedia(...)会提示您使用该设备所没有的相机的权限.不太好!

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

干杯

弥敦道

Cap*_*apK 6

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

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

  • MediaStreamTrack.getSources 已被删除,不再受支持。 (2认同)

Jos*_*ams 0

getUserMedia API 仍然是刚刚问世的,并且会有一些错误和需要改进的地方,就像这个问题。

但目前我还没有找到一种方法可以让您检查计算机是否确实有摄像头。虽然你可以使用 Flash :-( 来检测它,但我认为......