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

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

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

开启/关闭音频

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 = falselayer.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 = truelayer.msg('您已解除静音');}});} else {pc.getLocalStreams().forEach(function (stream) {stream.getAudioTracks().forEach(function (track) {if (track.kind === 'audio') {track.enabled = truelayer.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 = truelayer.msg('您已打开视频');}});} else {pc.getLocalStreams().forEach(function (stream) {stream.getAudioTracks().forEach(function (track) {if (track.kind === 'video') {track.enabled = truelayer.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 = falselayer.msg('您已关闭视频');}});} else {pc.getLocalStreams().forEach(function (stream) {stream.getAudioTracks().forEach(function (track) {if (track.kind === 'video') {track.enabled = falselayer.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 = mediaStreampc.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 = streampc.getSenders().forEach(sender => {if (sender.track.kind == 'video') {sender.replaceTrack(stream.getVideoTracks()[0])}});}).catch(error => {layer.msg('切换摄像头失败');console.error('切换摄像头失败,失败原因:', error)});}

功能截图稍后补充


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部