通过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>博文中 ...
随机推荐
- python面向对象(基础)
一 面向对象介绍 面向过程: 核心是:"过程"二字 过程的终极奥义就是将程序流程化 过程是"流水化",用来分步骤解决问题的 面向对象: 核心是"对象& ...
- 记录--Cesium+Vue实战教程——地图导航
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 项目效果 我们今天要实现的是一个路径规划的功能,有两个输入框.输入起点终点,然后查询,得到规划的路径,效果如下: 我们会用到以下库: Ax ...
- KingbaseES自动生成列介绍
在KingbaseES中create table语句支持GENERATED column(生成列). 生成列是一种特别的列类型,它的值基于其他列的值计算得出.因此,生成列之于列,有点像视图之于表的关系 ...
- KingabseES执行计划-分区剪枝(partition pruning)
概述 分区修剪(Partition Pruning)是分区表性能的查询优化技术 .在分区修剪中,优化器分析SQL语句中的FROM和WHERE子句,以在构建分区访问列表时消除不需要的分区.此功能使数据库 ...
- KingbaseES checkpoint_timeout参数对wal日志量的影响
前言 在KingbaseESV8R6数据库中,必须先将更改写入WAL日志(老版本称为 xlog),然后才能将这些更改从内存shared_buffer 写入到磁盘. 前两天有个同事遇到一个问题,wal日 ...
- markdown 常用表情符号 (github emoji)
markdown 常用表情(emoji) 官网[非笔者维护,仅做引用] Face Smiling 咧嘴笑 grinning 汗颜笑 sweat_smile 爆笑 rofl 眨眼笑 wink innoc ...
- SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQL MIN() 和 MAX() 函数 SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别.以下是它们的用法和示例: MIN() 函数 MIN()函数返回所选列的最小值. ...
- 【Kotlin】List、Set、Map简介
1 List Java 的 List.Set.Map 介绍见 → Java容器及其常用方法汇总. 1.1 创建 List 1.1.1 emptyList var list = emptyList& ...
- 打造HarmonyOS智能全场景,7大BUFF为您助力!
<HarmonyOS Connect系列课>上线,7套课程教会开发者打造智能全场景: <HarmonyOS Connect系列课>共含7套课程,按照业务流程先后分别为--Dev ...
- C 语言宏 + 内联汇编实现 MIPS 系统调用
目录 内联汇编 宏函数 宏定义 Syscall 内联汇编 编译测试 笔者最近作业要求练习 MIPS 汇编,熟悉 MIPS 汇编代码与 C 语言代码的对应关系.然而 SPIM/MARS 仿真器不能链接共 ...