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 = 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功能扩展的更多相关文章
- 基于 Web SDK 实现视频通话场景 | 声网 SDK 教程
声网视频 SDK 被广泛应用于多种实时互动场景中,例如视频会议.视频通话.音视频社交.在线教育等.为了让刚刚接触声网 SDK 的开发者,可以更顺畅地实现基础的视频通话功能,我们基于声网 Web SDK ...
- JS实现Web网页打印功能(IE)
问题描述: JS实现Web网页打印功能 问题解决: 这里主要使用WebBrowser控件的ExeWB在IE中打印功能的实现 WebBrowser介绍: WebBrows ...
- charles功能(五)屏蔽web网页的抓包信息(proxy)
应用场景:屏蔽web网页的抓包信息 proxy-->windows proxy(前面没有对勾,就不会抓到 PC浏览器的包) proxy-->macOS proxy(mac电脑) 最终效果
- iOS下WebRTC音视频通话(一)
在iOS下做IM功能时,难免都会涉及到音频通话和视频通话.QQ中的QQ电话和视频通话效果就非常好,但是如果你没有非常深厚的技术,也没有那么大的团队,很难做到QQ那么快速和稳定的通话效果. 但是利用We ...
- 一、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-项目引言
项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...
- web网页中使用vlc插件播放相机rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 使用vlc播放器播放rtsp视频 使用vlc进行二次开发做自己的播放器 vlc功能还是很强大的,有很多的现成的二次开发接口,不需配置太多即可轻松做客户端播放 ...
- 免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
https://www.freehao123.com/web-ftp/ 经常有朋友在使用一些没有带文件管理器的空间时,苦于没有办法来解压上传的文件压缩包,而如果不先上传压缩包,直接上传文件夹的话耗费的 ...
- iOS下WebRTC音视频通话(二)-局域网内音视频通话
这里是iOS 下WebRTC音视频通话开发的第二篇,在这一篇会利用一个局域网内音视频通话的例子介绍WebRTC中常用的API. 如果你下载并编译完成之后,会看到一个iOS 版的WebRTC Demo. ...
- web网页练习
一. HTML部分 1. XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同: XHTML 元素必须被正确地嵌套. XHTML 元 ...
- TI IPNC Web网页之网页修改教程
web网页程序修改 打开gStudio之后,点击菜单栏中Help->Contents.先把这个诡异的编程语言看一遍吧.这里搬一些东西出来. GoDB简介 从第一副图片中,我们可以看出,从源文件到 ...
随机推荐
- LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格 ...
- 聊聊Redis sentinel 机制
Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销: 监控主库运行状态,并判断主库是否客观下线: 在主库客观下线后,选取新主库: 选出新主库 ...
- 百度飞桨(PaddlePaddle)安装
注意:32位pip没有PaddlePaddle源 # 如果报下列错误,检查 Python 版本,不能过高也不要太低,并且不能是 32位的. ERROR: Could not find a versio ...
- cefsharp学习笔记
环境:VS2015+cefsharp 57.0 全部代码如下: 1.要初始化,否则不能刷新 using System; using CefSharp; using System.Collections ...
- 2022-10-20:以下go语言代码输出什么?A:7;B:7.0;C:0;D:编译错误。 package main import ( “fmt“ ) func main() { const
2022-10-20:以下go语言代码输出什么?A:7:B:7.0:C:0:D:编译错误. package main import ( "fmt" ) func main() { ...
- 2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )
2022-09-20:以下go语言代码输出什么?A:8 8:B:8 16:C:16 16:D:16 8. package main import ( "unsafe" " ...
- 2020-09-23:TCP头部信息有哪些?
福哥答案2020-09-23:#福大大架构师每日一题# 福哥口诀法:T源目序缺首保 紧确推和复同终 窗校紧选数(TCP格式:源端口,目的端口,序号,确认号,首部长度,保留,紧急位URG,确认位ACK, ...
- Django4全栈进阶之路9 STATIC静态文件路径设置、MEDIA媒体文件路径设置
在 Django 4 中,可以在 settings.py 文件中设置 STATICFILES_DIRS 来指定应用程序静态文件所在的文件夹路径,设置 STATIC_ROOT 来指定收集所有应用程序静态 ...
- vue全家桶进阶之路42:Vue3 SCSS、SASS、CSS
SCSS和SASS都是CSS预处理器,它们的主要目的是简化CSS的编写,增加可维护性,并提供更丰富的功能.下面是它们与普通的CSS的区别: 语法:SCSS和SASS都具有比普通CSS更丰富的语法.其中 ...
- WSGI实现支持多URL的WEB服务器