WebRTC: (1)设备管理

重要的API: enumerateDevices

基本格式:

其中ePromise中有个重要的结构体:MediaDevicesInfo


实操:

先准备express 部署一个Web服务器:

然后启动web服务器:

就可以访问public下发布路径下的文件了:

 这样就进入了设备管理准备的代码:

案例1: 打印设备信息

 

 其中的label没显示是因为http和https不安全的访问具有安全性问题,所以不会显示出来,

即使我这里使用的是https,但是

证书是自己的

可以通过letsencryp网站进行解决。

案例2: 在页面中显示设备

注意这里需要处理获取认证证书不安全的问题,否则这里的label为空:

client.js:

var audioSource = document.querySelector('select#audioSource');
var audioOutput = document.querySelector('select#audioOutput');
var videoSource = document.querySelector('select#videoSource');

if(!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices){
    console.log('enumerateDevices are not supported!');
}else{
    navigator.mediaDevices.enumerateDevices()
        .then(gotDevices)
        .catch(handleError);
}

function gotDevices(deviceInfos){
    deviceInfos.forEach( function(deviceInfo){
        console.log(deviceInfo.kind + ": label = " +deviceInfo.label + ": id = " +deviceInfo.deviceId + ": groupId = " + deviceInfo.groupId);

        var option = document.createElement('option');
        option.text = deviceInfo.label;
        option.value = deviceInfo.deviceId;
        if(deviceInfo.kind === 'audioinput'){
            audioSource.appendChild(option);
        }else if(deviceInfo.kind === 'audiooutput'){
            audioOutput.appendChild(option);
        }else if(deviceInfo.kind === 'videoinput'){
            videoSource.appendChild(option);
        }
    });
}

function handleError(err){
    console.log(err.name + ":" + err.message);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章