RTCPeerConnection基本概念 -- 以及创建和绑定音视频以及渲染远端视频时候的作用
RTCPeerConnection 是WebRTC的核心的 是其暴露个用户的统一接口 其由多个模块组成
· 网络处理模块
· 服务质量模块
· 音视频引擎模块 等等
最最厉害的就是根据网络情况动态调整出音视频的最佳服务质量
创建RTCPeerConnection
配置ICE 也就是建立网络协商方式var pcConfig = {'iceServers': [{'urls': 'turn:xxx.fun:3478','credential': "root",'username': "root"}]
};pc = new RTCPeerConnection(pcConfig);
configuration 参数分析
bundlePolicy 指定如何绑定传输通道
banlanced:音频与视频轨使用各自的传输通道
maxcompat:每个轨使用自己的传输通道
maxbundle:都绑定到同一个传输通道(主要使用)
iceTransportPolicy 指定ICE的传输策略
relay:只使用中继候选者 (测试时使用)
all:可以使用任何类型的候选者(一般使用)
iceServers 其由RTCIceServer组成,每个RTCIceServer都是一个ICE代理的服务器(如上demo)
credential 凭据,只有TURN服务使用
credentialType 凭据类型,可以password或oauth
urls 用于连接服中的ur数组
username 用户名,只有TURN服务使用
rtcpMuxPolicy rtcp的复用策略,该选项在收集ICE候选者时使用
negotiate 收集RTCP与RTP复用的ICE候选者,如果RTCP能复用就与RTP复用,如果不能复用,就将他们单独使用
require 只能收集RTCP与RTP复用的ICE候选者,如果RTCP不能复用,则失败(一般使用)
绑定本本地流
function bindTracks(){console.log('bind tracks into RTCPeerConnection!');if( pc === null || pc === undefined) {console.error('pc is null or undefined!');return;}if(localStream === null || localStream === undefined) {console.error('localstream is null or undefined!');return;}//add all track into peer connectionlocalStream.getTracks().forEach((track)=>{pc.addTrack(track, localStream); });}function getMediaStream(stream){if(localStream){stream.getAudioTracks().forEach((track)=>{localStream.addTrack(track); stream.removeTrack(track);});}else{localStream = stream; }localVideo.srcObject = localStream;//这个函数的位置特别重要,//一定要放到getMediaStream之后再调用//否则就会出现绑定失败的情况conn();}
远端音视频渲染
每当远端的音视频数据传递过来的时候 RTCPeerConnection对象的Ontrack()事件就会触发
我们只需要给其设置一个回调函数即可
pc = new RTCPeerConnection(pcConfig);pc.onicecandidate = (e)=>{if(e.candidate) {sendMessage(roomid, {type: 'candidate',label:event.candidate.sdpMLineIndex,id:event.candidate.sdpMid,candidate: event.candidate.candidate});}else{console.log('this is the end candidate');}}pc.ontrack = getRemoteStream;function getRemoteStream(e){remoteStream = e.streams[0];remoteVideo.srcObject = e.streams[0];
}
RTCPeerConnection基本概念 -- 以及创建和绑定音视频以及渲染远端视频时候的作用相关推荐
- SQL service基础(九)用户定义数据类型和用户定义函数的概念、创建及使用方法
实验目标: 1.学习和掌握用户定义数据类型的概念.创建及使用方法. 2.学习和掌握用户定义函数的概念.创建及使用方法. 创建一个数据库,执行shiyan15.sql脚本 一.创建和使用用户定义的函数( ...
- python sip模块(为C和C++库创建Python绑定)
Python的一个特性是,它具有强大的功能,它能够使用C或C++编写的现有库,并使它们成为Python扩展模块.这种扩展模块通常被称为库的绑定. SIP是一种工具,它可以很容易地为C和C++库创建Py ...
- SwiftUI之如何创建常量绑定与自定义绑定
一.如何创建常量绑定? 当正在制作一些 UI 原型时,或者当只需要传入一个值来让 SwiftUI 预览显示一些有意义的东西时,可以会发现使用常量绑定很有帮助:硬编码的值不会改变,但可以仍然像常规绑定一 ...
- ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令
ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令 ROS是什么 ROS文件系统 文件系统工具:rospack.roscd.rosls 创建ROS 软件包 catkin是什么 创建和构建一 ...
- Python数据分析实战【第三章】2.5-Pandas数据结构Dataframe:基本概念及创建【python】
[课程2.5] Pandas数据结构Dataframe:基本概念及创建 "二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值.字符串.布 ...
- Ceph实战(五):Ceph的块设备基本概念,创建以及其特点(基于nautilus版本)
您好,我是码农飞哥,本篇文章是Ceph实战专栏的第五篇文章,承接上文,默认我们已经将集群部署好了,本文主要讲述Ceph的块设备基本概念,创建以及其特点.订阅本专栏我会1V1的帮您解决部署和使用ceph ...
- iOS音视频开发七:视频采集
将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第七篇:iOS 视频采集 Demo.这个 ...
- 音视频流程 - 语音/短视频 :录制(编码)和播放(解码)
-- 录制小视频: Camera -> YUV帧序列 -> YUV帧处理(镜像,缩放,旋转) -> 编码器 -> H264数据 大体上就是从摄像头输出的YUV帧经过预处理之后 ...
- cocos creator对接字节跳动(抖音)小游戏激励视频广告注意事项(审核不通过,次数不一致和重复获得奖励等)
首先是官方文档里的对接方式:(https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-inter ...
最新文章
- 为什么 HashMap 的加载因子是0.75?
- Unsupported ONNX opset version: 11
- Qt中 QString 和int,double等的转换
- oracle中备份package源码
- python多级网址爬取_python-29:多级页面爬取源码
- quartus仿真系列2:74193功能
- “凸优化基础”相关理论知识
- ospf中DR/BDR选举及接口网络类型
- 上传图片报413错误
- Java实现微信公众号客服功能和本地联调
- 关于新光源中我想做的事
- android 图片叠加xml,Drawable子类之——LayerDrawable (图层叠加)
- Dispatch barriers处理读与写的冲突
- Bone-Age-Detection-From-X-Ray
- 使用高防CDN有什么用处?
- 计算机应用池在哪,机动车号牌发放将全国统一 号池号码全部由计算机随机投放、自动增补...
- 【经营智慧】002.赚钱主要靠知识和智慧
- RHCA第一天:环境搭建,访问命令行,简单命令
- 移动互联网——2011年最值得关注的100个应用程序(目录)
- 计算机大学生兼职项目的网站,大学生兼职信息分类网站的设计与实现(JSP,MySQL)(含录像)...
热门文章
- [csp2019]Emiya家今天的饭
- web渗透测试----12、HTTP主机标头漏洞
- killProcesses
- hge source explor 0x1
- SPARK-SQL 读取 内存table 或 hive中的table
- MySQL使用索引的正确方式你知道吗?
- 兼容ie(8、9、10、11),google等浏览器的多附件上传完整演示
- 浅析电力监控在新型数据中心的设计和应用-Susie 周
- Spring 5.0+Spring Boot+security+spring cloud oauth2+Redis整合详情,记录那些遇到的一些坑
- VCC、 VDD、VEE、VSS区别