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

本文详细介绍了如何使用JavaScript实现音视频通话中的音频开关、视频开关以及屏幕共享功能。通过操作peerConnection和媒体流,实现了静音/取消静音、打开/关闭视频以及获取屏幕流进行共享。代码中还包含了错误处理和状态提示。
摘要由CSDN通过智能技术生成

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

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

开启/关闭音频

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)
        });
    }

功能截图稍后补充

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于SIP(会话发起协议)和WebRTC(Web实时通信)的音视频通话是一种先进的通信技术。 SIP是一种信令协议,用于建立、修改和终止多媒体通讯会话。它提供了一种灵活的方式,可以实现语音、视频、即时消息等多种通信媒体的传输。SIP基于IP网络,可以在各种网络环境下使用。 WebRTC是一种开放的实时通信技术,可以在网页浏览器中直接使用,无需安装插件或其他软件。它提供了实时音频和视频通信的能力,并支持数据传输和文件共享。WebRTC通过使用JavaScript API和RTCPeerConnection建立点对点连接,实现了浏览器之间的直接通信。 基于SIPWebRTC的音视频通话结合了SIP的信令和WebRTC的音视频传输能力。当两个或多个终端需要进行音视频通话时,首先使用SIP建立会话连接,并交换IP地址和端口信息。然后,使用WebRTC建立点对点的音视频传输通道,进行音频和视频数据的传输和实时编解码。 基于SIPWebRTC的音视频通话具有很多优点。首先,它可以在各种终端设备上使用,包括计算机、手机和平板电脑。其次,它可以在不同的网络环境下使用,包括有线网络和无线网络。此外,它提供了高质量的音视频传输,具有低延迟和稳定性。 总的来说,基于SIPWebRTC的音视频通话是一种先进的通信技术,能够实现高质量、实时的音视频通信。它在各种应用场景中都有广泛的应用,包括在线教育、视频会议、远程医疗等。 ### 回答2: 基于SIP(会话初始协议)和WebRTC(网络实时通信)的音视频通话是一种基于互联网的实时通信技术,可以在不同设备和平台之间进行高质量的音频和视频通话SIP是一种通信协议,用于建立、修改、终止多媒体会话,如音视频通话。它可以在IP网络上传输标准化的语音、视频和其他媒体数据。SIP使用URI(统一资源标识符)作为用户标识,并通过SIP服务器进行信令交换和媒体协商。 WebRTC是一组技术,允许网页和移动应用在不需要任何插件或额外软件的情况下,通过浏览器直接进行音视频通信。WebRTC使用了一些开放标准,如实时传输协议(RTP)和实时传输控制协议(RTCP)来传输媒体数据。 基于SIPWebRTC的音视频通话有以下优点: 1. 跨平台支持:由于WebRTC是基于Web技术,可以在多种设备和平台上运行,包括PC、Mac、移动设备等。 2. 实时性强:音视频通话可以实时进行,避免了延迟和高延迟对通信的影响。 3. 便捷性:使用SIPWebRTC进行音视频通话不需要额外的软件和插件,用户只需要拥有一个支持WebRTC的浏览器。 4. 高质量:由于SIPWebRTC使用了先进的编解码算法和传输协议,音视频通话可以达到高质量的传输效果。 5. 安全性:SIPWebRTC提供了一些安全机制,如加密传输和身份验证,保护音视频通话的隐私和安全性。 综上所述,基于SIPWebRTC的音视频通话是一种灵活、跨平台、实时性强、高质量和安全的通信方式,为用户提供了更便捷和高效的交流体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值