是否可以检查用户是否具有摄像头和麦克风,以及是否已使用Javascript授予权限?

阿玛尔·安东尼(Amal Antony):

我想了解用户的设备是否具有连接的摄像头和麦克风,如果有,是否已授予使用Javascript获取音频和视频流的权限。我想至少在Chrome和Firefox上进行此项检查。什么是一致的API?

穆阿兹汗:

现场演示:

如果用户不允许使用网络摄像头和/或麦克风,则媒体设备“标签”属性将具有“ NULL”上面的页面将显示以下消息:“请调用一次getUserMedia。”

PS。您可以在Chrome控制台开发人员工具中输入“ DetectRTC.MediaDevices”

注意:仅适用于Chrome。 Firefox还不支持类似的API(已更新: Firefox也支持)

2015年12月16日更新

注意:以下代码段可在Chrome和Firefox中使用。

if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
    // Firefox 38+ seems having support of enumerateDevicesx
    navigator.enumerateDevices = function(callback) {
        navigator.mediaDevices.enumerateDevices().then(callback);
    };
}

var MediaDevices = [];
var isHTTPs = location.protocol === 'https:';
var canEnumerate = false;

if (typeof MediaStreamTrack !== 'undefined' && 'getSources' in MediaStreamTrack) {
    canEnumerate = true;
} else if (navigator.mediaDevices && !!navigator.mediaDevices.enumerateDevices) {
    canEnumerate = true;
}

var hasMicrophone = false;
var hasSpeakers = false;
var hasWebcam = false;

var isMicrophoneAlreadyCaptured = false;
var isWebcamAlreadyCaptured = false;

function checkDeviceSupport(callback) {
    if (!canEnumerate) {
        return;
    }

    if (!navigator.enumerateDevices && window.MediaStreamTrack && window.MediaStreamTrack.getSources) {
        navigator.enumerateDevices = window.MediaStreamTrack.getSources.bind(window.MediaStreamTrack);
    }

    if (!navigator.enumerateDevices && navigator.enumerateDevices) {
        navigator.enumerateDevices = navigator.enumerateDevices.bind(navigator);
    }

    if (!navigator.enumerateDevices) {
        if (callback) {
            callback();
        }
        return;
    }

    MediaDevices = [];
    navigator.enumerateDevices(function(devices) {
        devices.forEach(function(_device) {
            var device = {};
            for (var d in _device) {
                device[d] = _device[d];
            }

            if (device.kind === 'audio') {
                device.kind = 'audioinput';
            }

            if (device.kind === 'video') {
                device.kind = 'videoinput';
            }

            var skip;
            MediaDevices.forEach(function(d) {
                if (d.id === device.id && d.kind === device.kind) {
                    skip = true;
                }
            });

            if (skip) {
                return;
            }

            if (!device.deviceId) {
                device.deviceId = device.id;
            }

            if (!device.id) {
                device.id = device.deviceId;
            }

            if (!device.label) {
                device.label = 'Please invoke getUserMedia once.';
                if (!isHTTPs) {
                    device.label = 'HTTPs is required to get label of this ' + device.kind + ' device.';
                }
            } else {
                if (device.kind === 'videoinput' && !isWebcamAlreadyCaptured) {
                    isWebcamAlreadyCaptured = true;
                }

                if (device.kind === 'audioinput' && !isMicrophoneAlreadyCaptured) {
                    isMicrophoneAlreadyCaptured = true;
                }
            }

            if (device.kind === 'audioinput') {
                hasMicrophone = true;
            }

            if (device.kind === 'audiooutput') {
                hasSpeakers = true;
            }

            if (device.kind === 'videoinput') {
                hasWebcam = true;
            }

            // there is no 'videoouput' in the spec.

            MediaDevices.push(device);
        });

        if (callback) {
            callback();
        }
    });
}

// check for microphone/camera support!
checkDeviceSupport(function() {
    document.write('hasWebCam: ', hasWebcam, '<br>');
    document.write('hasMicrophone: ', hasMicrophone, '<br>');
    document.write('isMicrophoneAlreadyCaptured: ', isMicrophoneAlreadyCaptured, '<br>');
    document.write('isWebcamAlreadyCaptured: ', isWebcamAlreadyCaptured, '<br>');
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查设备是否具有跨平台方式的摄像头

Java检查麦克风输入是否被静音

iOS:是否可以同时从多个麦克风录制

在wkwebview中启用摄像头和麦克风访问

iOS检查应用程序是否可以访问麦克风

如何检查是否将耳机或内置麦克风用于麦克风输入?

WebRTC检查相机和麦克风是否在Chrome上使用

如何检查iPhone是否具有双摄像头?

如何检查用户是否已授予摄像头或位置权限(android)UNITY

为什么有2个不同的Flash权限对话框可用于摄像头/麦克风访问

Pubnub javascript视频聊天摄像头和麦克风静音机制?

是否可以更改Google Meet配置,以便用户无法禁用麦克风/视频?

Android:WebView-未启用会议摄像头和麦克风

WebRTC在通话中更换麦克风或摄像头

WebRTC:无法进行对等连接。浏览器不要求授予对麦克风/网络摄像头的权限

是否可以确定麦克风类型?

检查用户是否具有网络摄像头或不仅使用JavaScript?

在没有摄像头和麦克风的情况下使用RTMP和Red5模拟视频聊天

Firefox无需提示即可完全启用网络摄像头和麦克风

是否可以通过regedit关闭麦克风和摄像头?

HDMI /监控麦克风的摄像头

使用Apple的本机摄像头应用程序时是否可以提示用户

Unity-麦克风检查是否静音

好的麦克风/网络摄像头需要寻找的技术规格和功能

我们如何使用HTML页面访问移动设备的摄像头和麦克风

使用 Qt WebEngine 自动授予对麦克风和摄像头的访问权限

罗技网络摄像头麦克风/组合不起作用,只有网络摄像头没有麦克风

在 Virt-Manager 中使用网络摄像头和麦克风

qt webengine 在 mac 上请求摄像头和麦克风访问