检查音频和视频设备是否使用javascript连接

检查音频和视频设备是否使用javascript连接,javascript,angular,video,twilio,webrtc,Javascript,Angular,Video,Twilio,Webrtc,我正在使用twilio视频API构建一个视频通话网络平台,我们要求在用户加入通话之前,我们必须检查用户是否有音频和视频设备连接到他的计算机,如果用户没有任何音频和视频设备,则不允许用户加入视频通话 我已经尝试了mediaDevices.enumerateDevices。下面是代码 function getConnectedDevices(type, callback) { navigator.mediaDevices.enumerateDevices() .then(devices

我正在使用twilio视频API构建一个视频通话网络平台,我们要求在用户加入通话之前,我们必须检查用户是否有音频和视频设备连接到他的计算机,如果用户没有任何音频和视频设备,则不允许用户加入视频通话

我已经尝试了mediaDevices.enumerateDevices。下面是代码

function getConnectedDevices(type, callback) {
  navigator.mediaDevices.enumerateDevices()
    .then(devices => {
        console.log(devices);
        callback(filtered);
    });
}
这给了我下面的json

[{
    deviceId: "default",
    groupId: "10684f807204708d605cc3ad0e5c4eaf763f1440775b8f79cdecf72806cc82f5",
    kind: "audioinput",
    label: "Default - Microphone (Realtek Audio)"
},
{
    deviceId: "communications",
    groupId: "10684f807204708d605cc3ad0e5c4eaf763f1440775b8f79cdecf72806cc82f5",
    kind: "audioinput",
    label: "Communications - Microphone (Realtek Audio)"
},
{
    deviceId: "491ccf0569924a7c1264a6afd337a8f744f239d78414e80f17a07122725bb46c",
    groupId: "10684f807204708d605cc3ad0e5c4eaf763f1440775b8f79cdecf72806cc82f5",
    kind: "audioinput",
    label: "Microphone (Realtek Audio)"
},
{
    deviceId: "823160fcdef4bedf2d1769cfbcb9058fe41bc01258b811f9aef19eb21a27cb76",
    groupId: "f86216b491186ac3208f9fc59d31b913e7017bafb505005d39983345ab35811f",
    kind: "videoinput",
    label: "Integrated Webcam (0bda:5689)"
},
{
    deviceId: "default",
    groupId: "10684f807204708d605cc3ad0e5c4eaf763f1440775b8f79cdecf72806cc82f5",
    kind: "audiooutput",
    label: "Default - Speakers / Headphones (Realtek Audio)"
},
{
    deviceId: "communications",
    groupId: "10684f807204708d605cc3ad0e5c4eaf763f1440775b8f79cdecf72806cc82f5",
    kind: "audiooutput",
    label: "Communications - Speakers / Headphones (Realtek Audio)"
},
{
    deviceId: "213851f9659d4751c7c60016112d74e290d1ce398d12d774bda0c68ef590f61c",
    groupId: "10684f807204708d605cc3ad0e5c4eaf763f1440775b8f79cdecf72806cc82f5",
    kind: "audiooutput",
    label: "Speakers / Headphones (Realtek Audio)"
}
]

通过查看json,我并不完全理解如何检查可用的音频和视频设备。因为我必须在angular中实现这一点,所以我不想使用jquery或任何插件。如果您的计算机没有连接任何音频或视频设备,那么这个阵列将是空的。看起来这里已经连接了一些设备

您要查找的是麦克风的
音频输入
,以及摄像头的
视频输入

所以你可以这样做:

navigator.mediaDevices.enumerateDevices()
    .then(devices => {
        const microphones = devices.filter(d => d.kind === 'audioinput');
        const cameras = devices.filter(d => d.kind === 'videoinput');
        callback(
          microphones,
          cameras
        );
    });


如果
camers.length>0
则连接了某种类型的摄像头,如果
microphones.length>0
则连接了某种类型的麦克风。您可以使用它来检查是否允许某人接听电话。

如果您的计算机未连接任何音频或视频设备,则此阵列将为空。看起来这里已经连接了一些设备

您要查找的是麦克风的
音频输入
,以及摄像头的
视频输入

所以你可以这样做:

navigator.mediaDevices.enumerateDevices()
    .then(devices => {
        const microphones = devices.filter(d => d.kind === 'audioinput');
        const cameras = devices.filter(d => d.kind === 'videoinput');
        callback(
          microphones,
          cameras
        );
    });


如果
camers.length>0
则连接了某种类型的摄像头,如果
microphones.length>0
则连接了某种类型的麦克风。您可以用它来检查是否允许某人接听电话。

Twilio开发者福音传道者。这是一个很好的答案,我只想补充一点。也就是说,某些平台(尤其是iOS)不会提供来自
枚举设备的结果,除非您首先通过
getUserMedia
请求访问摄像头或麦克风。这里是Twilio开发者布道者。这是一个很好的答案,我只想补充一点。也就是说,在您首先通过
getUserMedia
请求访问摄像头或麦克风之前,某些平台(尤其是iOS)不会向您提供来自
枚举设备的结果。