通过WebRTC简单实现媒体共享
通过WebRTC简单实现媒体共享
媒体协商

- 在设置本地描述符(offer/answer)前,我们总是需要将媒体添加到连接中,只有这样在描述符中才能包含需要共享的媒体信息,除非你不需要共享媒体。
- 在实际应用中,我们通常没办法让两个客户端直接通信,进行媒体协商。因此我们通常需要一个双方都可以访问的中间服务器交换彼此的属性描述符这个服务器称之为信令服务器。建议使用websocket。
//以下代码并没用实现如何接收和发送描述符,这里只展示了接收到对应信息后应该如何设置。接收和发送属性描述符应该由具体业务决定
const pc = new RTCPeerConnection();
//这里是共享屏幕的方法
function screenSharing(){
navigator.mediaDevices.getDisplayMedia({
video: true,
audio: true
}).then((stream) => {
//将本地流添加到连接器中
stream.getTracks().forEach((track) => {
pc.addTrack(track, stream);
});
//createOffer
pc.createOffer()
.then(async (desc) => {
//设置本地描述
await this.pc.setLocalDescription(desc);
//发送offer
//发送offer代码省略,你可以使用如何方式将offer发送到另一个客户端
}).catch((err) => {
//这里是错误处理
});
}).catch((err) => {
//这里是错误处理
});
}
//接送到远程的answer后调用
function setRemoteAnswer(Answer){
pc.setRemoteDescription(new RTCSessionDescription(Answer));
}
//接收到远程的offer后调用
function setRemoteOffer(Offer) {
pc.setRemoteDescription(new RTCSessionDescription(data.desc))
.then(() => {
pc.createAnswer().then((desc) => {
pc.setLocalDescription(desc)
.then(() => {
//这里是发送answer应答
//发送answer代码省略,你可以使用如何方式将answer发送回offer发送的客户端
})
})
})
}
//创建pc的实例后调用
function setRemoteMedia(){
pc.ontrack = (e) => {
//这里是处理接收的远程媒体。这个示例表示将媒体流在id为remoteVideo 的video元素中播放
//在用户没有和页面有互操作前,可能无法直接播放
let video = document.getElementById("remoteVideo") as HTMLVideoElement;
video.srcObject = e.streams[0];
video.onloadedmetadata = (e) => {
video.play();
}
}
}
//创建pc的实例后调用
function setRemoteMedia(){
pc.onicecandidate = (e: RTCPeerConnectionIceEvent) => {
//这里会在协商完成后发送ice候选
//发送ice代码省略
}
}
//收到ice候选后的调用
function SetRemoteIce(candidate){
pc.addIceCandidate(new RTCIceCandidate(candidate))
.then(() => {
//这里成功设置了ice候选
})
}
更详细信息可参考一下文档
通过WebRTC简单实现媒体共享的更多相关文章
- Win7共享文件夹简单?这个共享问题可以难倒90%的人
信息化社会,没有哪个公司不用电脑办公了.一个办公室里面的同事相互之间利用系统的共享功能,共享一些文件和软件已经是司空见惯的了,这个不需要多么复杂的操作.我们使用最多的windows7操作系统就能很方便 ...
- 简单解决XP共享连接数10限制(转)
1.建立一个txt文件,在里面输入以下文字:net session /delete /y,并将其保存为clear session.bat文件.net session用于查看本机共享的会话详细情况,可以 ...
- 一个简单的C共享库的创建及Python调用此库的方法
/********************************************************************* * Author : Samson * Date ...
- nginx+tomcat9+redisson+redis+jdk1.8简单实现session共享
一.环境安装 由于资源限制,在虚拟机中模拟测试,一台虚拟机,所有软件均安装到该虚拟机内 安装系统:CentOS Linux release 7.4.1708 (Core) CentOS安装选择版本:B ...
- 简单使用媒体查询@media
@media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的. 那媒体查询该如何使用呢? 一.铺垫 1.首先我们在使用 @media 的时候需要 ...
- samba 最简单配置 共享
[root@GitLab ~]# cat /etc/samba/smb.conf [global] workgroup = WORKGROUP server string = David Samba ...
- 简单的session共享的封装
目的 session存储在缓存服务器上(各种缓存服务器上均可,本文以memcached为例),但对开发者来说,他不用关注,只需要调用request.getSession()方法即可获取到session ...
- 实例——简单的Samba共享
服务端配置 # 临时停止iptables service iptables stop # 临时禁用SELinux setenforce 0 # 禁止iptables开机自动启动 chkconfig i ...
- WebRTC介绍及简单应用
WebRTC介绍及简单应用 WebRTC,即Web Real-Time Communication,web实时通信技术.简单地说就是在web浏览器里面引入实时通信,包括音视频通话等. WebRTC实时 ...
- 快速构建Windows 8风格应用21-构建简单媒体播放器
原文:快速构建Windows 8风格应用21-构建简单媒体播放器 本篇博文主要介绍如何构建一个简单的媒体播放器. <快速构建Windows 8风格应用20-MediaElement>博文中 ...
随机推荐
- Kotlin 协程基础使用学习
原文: Kotlin 协程基础使用学习-Stars-One的杂货小窝 本篇阅读可能需要以下知识,否则可能阅读会有些困难 客户端开发基础(Android开发或JavaFx开发) Java多线程基础 ko ...
- 记录--TS封装axios
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 写在前面 虽然说Fetch API已经使用率已经非常的高了,但是在一些老的浏览器还是不支持的,而且axios仍然每周都保持2000多万的下 ...
- KingbaseES 原生XML系列三--XML数据查询函数
KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS) XML的简单使 ...
- Windows配置Git本地仓库
git版本控制常用命令 1.配置身份信息 git config --global user.name "ycw.42624" # 名称 git config --global us ...
- 05 CMMI(Capability Maturity Model Integration)【软件过程与管理】
CMMI(Capability Maturity Model Integration) CMMI成熟度等级 执行的:过程不可预测,缺乏控制,反应式的 已管理的:项目描绘过程,而且经常是反应式的 已定义 ...
- 测试开发之系统篇-Docker常用操作
Docker容器(Container)的运行基于镜像(image),您可以在Docker Hub上检索,或通过Dockerfile文件自己构建镜像. 首先拉取MySQL官方镜像的最新版(latest) ...
- #排列组合#美团2018年CodeM大赛-决赛 A-Exam
题目 分析 因为第一名所在的学校一定会发喜报, 所以只有一个学校发喜报说明其它学校都没有发喜报 钦定第一名所在的学校为1,总方案要乘\(n\),那么两个1之间不可能出现两个相同的学校的学生 那么可以分 ...
- Blazor OIDC 单点登录授权实例7 - Blazor hybird app 端授权
目录: OpenID 与 OAuth2 基础知识 Blazor wasm Google 登录 Blazor wasm Gitee 码云登录 Blazor OIDC 单点登录授权实例1-建立和配置IDS ...
- openGauss 2.1.0 闪回特性
openGauss 2.1.0 闪回特性 openGauss 2.1.0 于 2021 年 9 月 30 日发布,是 openGauss 的一个 Preview 版本,该版本生命周期仅为半年.该版本的 ...
- 论文研究区域图的制作方法:ArcGIS
本文介绍基于ArcMap软件,绘制论文中研究区域示意图.概况图等的方法. 最近需要绘制与地学有关论文.文献中的研究区域概况图.对于这一类图片,我个人比较喜欢基于ArcMap与PPT结合的方式来 ...