美文网首页音视频通话
Web网页音视频通话之基于sipjs功能扩展

Web网页音视频通话之基于sipjs功能扩展

作者: HeloWxl | 来源:发表于2022-07-06 00:56 被阅读0次

    在上一篇开发基础上,已经实现了音视频通话。本文是在此基础上继续完成以下内容

    • 关闭/开启音频
    • 开启/关闭视频
    • 屏幕共享

    开启/关闭音频

    javaScript

    /**
         * 静音
         */
        mute() {
            if (!currentSession) {
                layer.msg("请先建立视频通话");
                return false;
            }
            var pc = currentSession.sessionDescriptionHandler.peerConnection;
            if (pc.getSenders) {
                pc.getSenders().forEach(function (sender) {
                    if (sender.track.kind === 'audio') {
                        sender.track.enabled = false
                        layer.msg('您已开启静音');
                    }
                });
            } else {
                pc.getLocalStreams().forEach(function (stream) {
                    stream.getAudioTracks().forEach(function (track) {
                        if (track.kind === 'audio') {
                            track.enabled = false;
                            layer.msg('您已开启静音');
                        }
                    });
                });
            }
        }
    /**
         * 解除静音
         */
        unmute() {
            if (!currentSession) {
                layer.msg("请先建立视频通话");
                return false;
            }
            var pc = currentSession.sessionDescriptionHandler.peerConnection;
            if (pc.getSenders) {
                pc.getSenders().forEach(function (sender) {
                    if (sender.track.kind === 'audio') {
                        sender.track.enabled = true
                        layer.msg('您已解除静音');
                    }
                });
            } else {
                pc.getLocalStreams().forEach(function (stream) {
                    stream.getAudioTracks().forEach(function (track) {
                        if (track.kind === 'audio') {
                            track.enabled = true
                            layer.msg('您已解除静音');
                        }
                    });
                });
            }
        }
    

    功能截图稍后补充

    开启/关闭视频

    javaScript

     /**
         * 打开视频
         */
        openVideo() {
            if (!currentSession) {
                layer.msg("请先建立视频通话");
                return false;
            }
            var pc = currentSession.sessionDescriptionHandler.peerConnection;
            if (pc.getSenders) {
                pc.getSenders().forEach(function (sender) {
                    if (sender.track.kind === 'video') {
                        sender.track.enabled = true
                        layer.msg('您已打开视频');
                    }
                });
            } else {
                pc.getLocalStreams().forEach(function (stream) {
                    stream.getAudioTracks().forEach(function (track) {
                        if (track.kind === 'video') {
                            track.enabled = true
                            layer.msg('您已打开视频');
                        }
                    });
                });
            }
        }
    /**
         * 关闭视频
         */
        closeVideo() {
            if (!currentSession) {
                layer.msg("请先建立视频通话");
                return false;
            }
            var pc = currentSession.sessionDescriptionHandler.peerConnection;
            if (pc.getSenders) {
                pc.getSenders().forEach(function (sender) {
                    if (sender.track.kind === 'video') {
                        sender.track.enabled = false
                        layer.msg('您已关闭视频');
                    }
                });
            } else {
                pc.getLocalStreams().forEach(function (stream) {
                    stream.getAudioTracks().forEach(function (track) {
                        if (track.kind === 'video') {
                            track.enabled = false
                            layer.msg('您已关闭视频');
                        }
                    });
                });
            }
        }
    

    功能截图稍后补充

    屏幕共享

    javaScript

      /**
         * 屏幕流
         */
        shareScreenStream() {
            if (currentSession == null) {
                layer.msg("请先建立视频通话");
                return false;
            }
            var pc = currentSession.sessionDescriptionHandler.peerConnection;
            const displayMediaStreamConstraints = {
                video: {
                    cursor: "always"
                },
                audio: true
            };
            //获取分享窗口流
            if (navigator.mediaDevices.getDisplayMedia) {
                navigator.mediaDevices.getDisplayMedia(displayMediaStreamConstraints).then(mediaStream => {
                    localVideo.srcObject = mediaStream
                    pc.getSenders().forEach(sender => {
                        if (sender.track.kind == 'video') {
                            var res = sender.replaceTrack(mediaStream.getVideoTracks()[0])
                            console.log(res)
                        }
                    });
                    //监听手动点击“停止分享”
                    mediaStream.getVideoTracks()[0].onended = () => {
                        layer.msg("桌面共享已关闭,正在切换为摄像头数据,请稍后...")
                        SCREENSHARDING.switchCamera(pc)
                    }
                }).catch(error => {
                    console.log("error", error)
                    layer.msg("媒体设备获取异常")
                });
            } else {
                console.log("navigator.mediaDevices.getDisplayMedia  false");
                layer.msg("浏览器不不支持")
            }
        },
        /**
         * 切换为摄像头数据
         */
        switchCamera(pc) {
            var constraints = {
                audio: {
                    autoGainControl: true,
                    // 噪音消除
                    noiseSuppression: true,
                    // 设置降噪
                    echoCancellation: true
                },
                video: true
            }
            navigator.mediaDevices.getUserMedia(constraints).then(stream => {
                localVideo.srcObject = stream
                pc.getSenders().forEach(sender => {
                    if (sender.track.kind == 'video') {
                        sender.replaceTrack(stream.getVideoTracks()[0])
    
                    }
                });
            }).catch(error => {
                layer.msg('切换摄像头失败');
                console.error('切换摄像头失败,失败原因:', error)
            });
        }
    

    功能截图稍后补充

    相关文章

      网友评论

        本文标题:Web网页音视频通话之基于sipjs功能扩展

        本文链接:https://www.haomeiwen.com/subject/udmebrtx.html