WebRTC API分析

主题

本文详细描述常用的webrtc api

媒体协商类

myPeerConnection.createOffer([options]);

var options = {     
    offerToReceiveAudio: true,     // 告诉另一端,你是否想接收音频,默认true
    offerToReceiveVideo: true,     // 告诉另一端,你是否想接收视频,默认true
    iceRestart: false,             // 是否在活跃状态重启ICE网络协商
};
 iceRestart:只有在处于活跃的时候,iceRestart=false才有作用。

  RTCPeerConnection .createAnswer([ options ]);

options :
voiceActivityDetection (布尔型,默认 true): 是否启用语音活动检测。
offerToReceiveAudio (整型,默认 1): 希望接收的音频流数量。
offerToReceiveVideo (整型,默认 1): 希望接收的视频流数量。

RTCPeerConnection .setLocalDescription 设置本地sdp描述

RTCPeerConnection .setRemoteDescription设置对端sdp描述

RTCPeerConnection.addTrack(track, ...streams) 用于将一个或多个媒体轨道添加到 RTCPeerConnection
track: 要添加的 MediaStreamTrack 对象。
...streams: 可选的 MediaStream 对象列表,表示该轨道属于哪些流。
例子:
//添加本地轨道
localStream.getTracks().forEach((track) => pc.addTrack(track, localStream));

 

网络协商类

RTCPeerConnection.addIceCandidate(candidate) 添加一个 ICE 候选人

candidate

注意Android和Web端的不同。

 

RTCPeerConnection补充

 pc = new RTCPeerConnection([ configuration ]);

configuration可选
bundlePolicy 一般用maxbundle
     banlanced:音频与视频轨使用各自的传输通道
    maxcompat:每个轨使用自己的传输通道
    maxbundle:都绑定到同一个传输通道
iceTransportPolicy 一般用all
    指定ICE的传输策略
    relay:只使用中继候选者
    all:可以使用任何类型的候选者
iceServers
    其由RTCIceServer组成,每个RTCIceServer都是一个ICE代理的服务器 

 rtcpMuxPolicy 一般用require

 rtcp的复用策略,该选项在收集ICE候选者时使用

使用例子: 

var defaultConfiguration = {bundlePolicy: "max-bundle",rtcpMuxPolicy: "require",iceTransportPolicy: "all",//relay 或者 all// 修改ice数组测试效果,需要进行封装iceServers: [{"urls": ["turn:192.168.1.25:3478?transport=udp","turn:192.168.1.25:3478?transport=tcp"     // 可以插入多个进行备选],"username": "jbj","credential": "123456"},{"urls": ["stun:192.168.1.25:3478"]}]};pc = new RTCPeerConnection(defaultConfiguration);

重要事件回调 

onicecandidate 事件:

  • RTCPeerConnection 对象收集到一个新的 ICE 候选人时,会触发这个事件。

  • 事件回调函数会收到一个 RTCPeerConnectionIceEvent 对象,其中包含新收集到的 RTCIceCandidate 对象。

  • 你可以在这个事件处理函数中,将收集到的 ICE 候选人发送给对方对等端。

ontrack 事件:

  • RTCPeerConnection 对象接收到来自远端的媒体流时,会触发这个事件。

  • 事件回调函数会收到一个 RTCTrackEvent 对象,其中包含新收到的 MediaStreamTrack 对象以及相关的 MediaStream 对象。

  • 你可以在这个事件处理函数中,将接收到的媒体流添加到页面上进行渲染。

onconnectionstatechange 事件:

  • RTCPeerConnection 对象的连接状态发生变化时,会触发这个事件。

  • 连接状态可以是 newconnectingconnecteddisconnectedfailedclosed

  • 你可以在这个事件处理函数中,根据连接状态的变化采取相应的措施,如更新 UI、重试连接等。

oniceconnectionstatechange 事件:

  • RTCPeerConnection 对象的 ICE 连接状态发生变化时,会触发这个事件。

  • ICE 连接状态可以是 newcheckingconnectedcompleteddisconnectedfailedclosed

  • 你可以在这个事件处理函数中,根据 ICE 连接状态的变化采取相应的措施,如诊断网络问题、重试连接等。

学习资料分享

0voice · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470671.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11张思维导图带你快速学习java

博主主页:【南鸢1.0】 本文专栏:JAVA 本文目录 简介 1.Java SE​编辑 2.Java Web 3.MySQL​编辑 4.前端技术 5.Linux 6.Spring SpringMvc mybatis 7.JVM 8.Springboot 9.Vue 10.SpringCloud 11.常用中间件 总结 简介 Java是一种跨平台的编程语言&am…

Jmeter基础篇(22)服务器性能监测工具Nmon的使用

一、前言 我们在日常做压测的过程中,不仅仅需要监控TPS,响应时间,报错率等这些系统基础性能数据,还需要对服务器的性能(如CPU、磁盘、内存、网络IO等)做监控,以求对系统运行过程中的硬件性能有…

Unity3D学习FPS游戏(12)敌人检测和攻击玩家

前言:上一篇实现了敌人能动,有了点乐趣,但是敌人和玩家没什么对抗性。本篇将实现敌人追击玩家,并攻击玩家。 敌人攻击玩家 敌人检测玩家目标思路-碰撞检测的Trigger触发实现 敌人攻击目标思路-模仿玩家发射子弹的思路实现 效果 敌…

利用滑动窗口解题

目录 前言: 第一题:209. 长度最小的子数组 - 力扣(LeetCode) 第二题:1004. 最大连续1的个数 III - 力扣(LeetCode) 第三题:3. 无重复字符的最长子串 - 力扣(LeetCode&…

车载空气净化器语音芯片方案

开发背景: 随着人们生活质量的不断提升和环保意识的日益增强,车内空气质量成为了广大车主关注的焦点。长时间封闭的车厢环境,加之城市空气污染、新车内饰材料释放的有害气体等因素,使得车内空气质量往往不尽如人意,严重…

《MYSQL45讲》误删数据怎么办

对误删数据分类的话,有 1.delete 误删行 2.drop table 或者truncate table 语句误删表 3.使用drop database 误删数据库 4.使用rm命令误删整个MYSQL实例 一,误删行 一下操作前置条件是:binlog的格式是row,并且binglog_row_im…

不对称信息

你买了一辆二手车,你并不知道它出过几次事故,但它之前的车主却对此了如指掌。来买保险的公司都是那些出险概率很大的(比如矿工、化工厂),但那些安全的公司很少去买保险,这两种问题都属于信息不对称问题。 …

94个属于一区且接受医工交叉领域投稿的期刊汇总|个人观点·24-11-13

小罗碎碎念 继汇总病理AI的基础模型、病理组学&影像组学的公开数据集以后,我们再来盘一盘医工交叉领域有哪些热门期刊可以投稿。我会分区进行介绍,每个区则会进一步划分学科种类,方便大家选择适合自己的投稿期刊。 这期推文先分享大类属…

网站小程序app怎么查有没有备案?

网站小程序app怎么查有没有备案?只需要官方一个网址就可以,工信部备案查询官网地址有且只有一个,百度搜索 "ICP备案查询" 找到官方gov.cn网站即可查询! 注:网站小程序app备案查询,可通过输入单位…

MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?

文章目录 MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?一、幻读的定义二、幻读带来的问题(一)语义问题(二)数据一致性问题 三、InnoDB 解决幻读的方法四、总结 MySQL45讲 第二十讲 幻读是什么&#xff0…

FatLab:我的编程课程系列

FatLab 是一款教程类软件。 大概是因为我的编程生涯始于自学,FatLab便也保持了这种气息:从一个“自然生长”的角度提供了一套C语言教程。 教程方面,目前仅完成了《C语言基础要素》系列。正如其名,这个系列仅探讨了语言中非常基础…

冗余连接2 hard题 代随C#写法

此题在卡码网109与力扣685题亦有记载 有一说一C#写法我没咋搞懂 就看明白了思路 这里贴一个答案待后续我醒悟了再来看罢 难就难在对整体数据结构classUnion(并查集)的理解不熟并且 对于输入输出这个迭代过程理解上也比较吃力 109. 冗余连接II 题…

【QT】QSS

个人主页~ 一、QSS QSS可以说是拿了CSS的一部分过来用,是CSS的简化版本 1、基本语法 选择器 {属性名:属性值; }将界面上所有的QPushButton文本颜色都改为红色 QPushButton {color:red; }2、设置方式 (1)指定控件样式设置 在widget.cpp中…

java模拟键盘实现selenium上下左右键 table中的左右滚动条实现滚动

在这篇文章中,我们将学习如何使用Java编程语言模拟键盘输入,特别是模拟上下左右方向键的操作。这是一个很有趣的项目,尤其适合刚入行的开发者。我们将分步进行,接下来,我们会通过表格展示整个实现过程,然后…

JQuery封装的ajax

1. 注意&#xff1a; 首先要导jq的包json对象可以用 . 来调用keyjava只能给前端传页面&#xff0c;或者打印的内容String jsonstr json.toJSONString(resultJSON); //将对象转为JSON对象 Json格式和参数解释&#xff1a; <script src"js/jquery-1.10.2.min.js&quo…

文献解读-DNAscope: High accuracy small variant calling using machine learning

关键词&#xff1a;基准与方法研究&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;DNAscope: High accuracy small variant calling using machine learning标题&#xff08;中文&#xff09;&#xff1a;DNAsc…

vue中如何关闭eslint检测?

ESLint作为一个用于JavaScript代码的验证工具&#xff0c;主要用于检查代码语法和编码规范。本文旨在指导那些希望在Vue.js项目中禁用ESLint验证功能的用户。对于需要这一操作的朋友&#xff0c;以下内容将提供参考。 vue中如何关闭eslint检测&#xff1f; 有了eslint的校验&…

用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转这些功能

&#xff08;一&#xff09;安装插件SystemVerilog - Language Support 安装一个vscode插件即可&#xff0c;插件叫SystemVerilog - Language Support。虽然说另一个插件“Verilog-HDL/SystemVerilog/Bluespec SystemVerilog”也有信号提示及定义跳转功能&#xff0c;但它只能提…

️️一篇快速上手 AJAX 异步前后端交互

AJAX 1. AJAX1.1 AJAX 简介1.2 AJAX 优缺点1.3 AJAX 前后端准备1.4 AJAX 请求基本操作1.5 AJAX 发送 POST 请求1.6 设置请求头1.7 响应 JSON 数据1.8 AJAX 请求超时与网络异常处理1.9 取消请求1.10 Fetch 发送 Ajax 请求 2. jQuery-Ajax2.1 jQuery 发送 Ajax 请求&#xff08;G…

❤React-React 组件通讯

❤ React 组件通讯 组件通讯将教我们的内容&#xff1a; 能够使用道具接收数据W能够实现父子组件之间的通讯能够实现兄弟组件之间的通讯能够给组件添加道具校验能够说出生命周期常用的钩子函数能够知道高阶组件的作用 1、 组件通讯介绍 组件是独立且封闭的单元&#xff0c;…