# Tutorial: 通话前环境与设备检测

## 通话前环境与设备检测

## 浏览器环境检测

在开始音视频通话之前，建议您先使用avdEngine.checkBrowserSupport()接口检测 SDK 是否支持当前网页。如果 SDK 不支持当前浏览器，建议用户使用最新版的 Chrome 浏览器、Edge 浏览器、Safari 浏览器、Firefox 浏览器。

    var browserSupport = avdEngine.checkBrowserSupport();
    if(browserSupport){
        console.log("当前网页支持SDK.");
    }else{
        console.log("不支持使用 SDK，引导用户使用最新版的 Chrome 浏览器。");
    }

⚠️ `avdEngine.checkBrowserSupport()` 返回的检测结果为 false 时，可能是以下原因：

​ 当前浏览器不支持 WebRTC 相关能力，您需要引导用户使用推荐的浏览器 浏览器与应用环境信息

另外SDK提供了avdEngine.getBrowserDetect()接口， 可以返回SDK检测到的浏览器相关一些信息。

    var detect = avdEngine.getBrowserDetect();
    var output = 'navigator.userAgent:' + navigator.userAgent + '<br>';
    output += '浏览器内核名称: ' + detect.browser.name + '<br>';
    output += '内核版本: ' + detect.browser.fullVersion + '<br>';
    output += '定制外壳: ' + detect.browser.isCustomized + '<br>';
    output += '外壳名称: ' + detect.browser.shellName + '<br>';
    output += '外壳版本: ' + detect.browser.shellFullVersion + '<br>';
    output += '操作系统名称: ' + detect.osName + '<br>';
    output += '是否支持webrtc的GetUserMedia: ' + detect.getUserMediaSupport + '<br>';
    output += '是否支持webrtc的RTCPeerConnection: ' + detect.RTCPeerConnectionSupport + '<br>';
    output += '是否支持webrtc的DataChannel: ' + detect.dataChannelSupport + '<br>';
    output += '是否支持WebSocket: ' + detect.WebSocketSupport + '<br>';
    output += '是否支持屏幕共享: ' + detect.screenSharingSupport + '<br>';
    output += '是否支持ORTC: ' + detect.ORTCSupport + '<br>';
    console.log("SDK检测到的浏览器相关信息："+output);

## 音视频设备测试

为保证用户在使用AVDSDK 的过程中有更好的用户体验，我们建议您在用户加入 AVDRTC 房间之前，对用户设备进行检测并给出建议和引导。

    //设备初始化
    avdEngine.initDevice().then(function(result){
        if(avdEngine.hasCamera){
            console.log("当前有摄像头设备");
        }else{
        c onsole.log("当前没有摄像头设备");
        }

        if(avdEngine.hasMicrophone){
            console.log("当前有麦克风设备");
        }else{
            console.log("当前没有麦克风设备");
        }
    });

    if(avdEngine.isFirefox) {
    	avdEngine.checkOpenVideoAndAudio(cameraId,microphoneId).then(showVideoAndAudio).otherwise(alertError);
    } else {
    	avdEngine.checkOpenVideo(cameraId).then(showVideo).otherwise(alertError);
    	avdEngine.checkOpenAudio(microphoneId).then(showAudio).otherwise(alertError);
    }

    function showVideoAndAudio(stream) {
    	checkVideo.srcObject = stream.videoStream;
    	checkVideo.play();

    	checkAudio.srcObject = stream.audioStream;
    	checkAudio.play();

    	var intervalMilis = 500;  //音量采购频率，毫秒
    	avdEngine.checkAudioLevel(intervalMilis,showAudioLevel);
    }

    function showVideo(stream) {
    	checkVideo.srcObject = stream;
    	checkVideo.play();
    }

    function showAudio(stream) {
    	checkAudio.srcObject = stream;
    	checkAudio.play();

    	var intervalMilis = 500; //音量采购频率，毫秒
    	avdEngine.checkAudioLevel(intervalMilis,showAudioLevel);
    }

    function showAudioLevel(audioLevel) {
    	console.log("音量值(阈值0-10):") + audioLevel;
    }

    avdEngine.checkCloseVideo(); //关闭设备检测中摄像头
    avdEngine.checkCloseAudio(); //关闭设备检测中麦克风

应用层参考效果图：