WebRTC通话原理
WebRTC通话原理
目录
- 媒体协商-音视频编解码
- 网络协商
- STUN
- TURN
- 媒体协商+网络协商 数据的交换通道
- WebRTC API
- 一对一通话
1. 媒体协商-音视频编解码
- 比如: Peer-A端可支持VP8、 H264多种编码格式,而Peer-B端支持VP9、 H264,要保证二端都正确的编解码,最简单的办法就是取它们的交集H264
- 有一个专门的协议 ,称为Session Description Protocol (SDP),可用于描述上述这类信息,在WebRTC中,参与视频通讯的双方必须先交换SDP信息,这样双方才能知根知底,而交换SDP的过程,也称为"媒体协商"。
2. 网络协商
- 彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路
- 理想的网络情况是每个浏览器的电脑都是私有公网IP,可以直接进行点对点连接
- 实际情况是:我们的电脑和电脑之间或大或小都是在某个局域网中, 需要NAT(Network Address Translation,网络地址转换)
1. STUN
- STUN(Session Traversal Utilities for NAT, NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT) 后的客户端找出自己的公网地址(ip+port),查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。
- 使用一句话说明STUN做的事情就是:告诉我你的公网IP地址+端口是什么。
- 问题是: STUN并不是每次都能成功的为需要NAT的通话设备分配IP地址的, P2P在传输媒体流时,使用的本地带宽,在多人视频通话的过程中,通话质量的好坏往往需要根据使用者本地的带宽确定。
- TURN可以很好的解决这个问题。
2. TURN
- TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如果终端在NAT之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发
- 在STUN分配公网IP失败后,可以通过TURN服务器请求公网IP地址作为中继地址。这种方式的带宽由服务器端承担,在多人视频聊天的时候,本地带宽压力较小。
- 以上是WebRTC中经常用到的2个协议, STUN和TURN服务器我们使用coturn开源项目来搭建
- ICE( Interactive Connectivity Establishment,交互式连接建立)
- 跟STUN和TURN不一样, ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。 coturn开源项目集成了STUN(打洞)和TURN(中继)的功能。
- 网络信息:放在 candidate
3. 媒体协商+网络协商 数据的交换通道
- 从上面我们知道了2个客户端协商媒体信息(SDP)和网络信息(candidate),那怎么去交换?是不是需要一个中间商去做交换?所以我们需要一个信令服务器(Signal server)(房间服务器)转发彼此的媒体信息和网络信息。
- 访问到的局域网,借助信令服务器,就可以实现上面提到的SDP媒体信息及Candidate网络信息交换。
- 信令服务器不只是交换 媒体信息sdp和网络信息candidate,比如:
- 房间管理
- 人员进出房间
4. WebRTC API
- MediaStream : MediaStream用来表示一个媒体数据流(通过getUserMedia接口获取),允许你访问输入设备,如麦克风和 Web摄像机,该 API 允许从其中任意一个获取媒体流。
- RTCPeerConnection : RTCPeerConnection 对象允许用户在两个浏览器之间直接通讯 ,你可以通过网络将捕获的音频和视频流实时发送到另一个 WebRTC端点。使用这些 Api,你可以在本地机器和远程对等点之间创建连接。它提供了连接到远程对等点、维护和监视连接以及在不再需要连接时关闭连接的方法。
5. 一对一通话
WebRTC通话原理相关推荐
- WebRTC通话原理(六)
WebRTC通话原理-基本流程 基本流程 WebRTC通话最典型的应用场景就是一对一音视频通话,如微信或QQ音视频聊天.通话的过程是比较复杂的,这里我们简化这个流程,把最主要的步骤提取出来,如图所示. ...
- WebRTC通话原理-网络协商-NAT-ICE-STUN-TURN
作者: 亢少军 彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路.需要做以下两个处理. 获取外网IP地址映射. 通过信令服务器(signal server)交换"网络信息&quo ...
- WebRTC通话原理-SDP协议
作者: 亢少军 会话描述协议Session Description Protocol (SDP) 是一个描述多媒体连接内容的协议,例如分辨率,格式,编码,加密算法等.所以在数据传输时两端都能够理解彼此 ...
- WebRTC通话INCOMPATIBLE_DESTINATION问题排查、verto与STUN协议
一个功能完整的WebRTC应用需要: 使用GetUserMedia API 控制麦克风和摄像头 使用一种会话协议和可能的外部辅助服务器定位对方端点并建立会话 使用ICE(和STUN和TURN)确定网络 ...
- 详解 WebRTC 协议原理与框架、WebRTC编程问题迎刃而解
转载注:本文转载csdn的<极客雨露>博客文章,转载者根据个人理解对此两篇文章内容.进行整编并添加文档标题和编号,增加转载标注内容. 一.WebRTC 是什么 WebRTC,名称源自网页即 ...
- 用云服务器实现janus之web端与web通话!
一.前言: 大家周末好,今天给大家分享janus环境搭建以及如何实现web端与web端的实时通话!在写正式文章之前,首先要说明一下,本次环境的搭建,我没有在ubuntu本地去搭建,而是腾讯云服务器上搭 ...
- FFmpeg/WebRTC/RTMP/RTSP/HLS/播放器-音视频流媒体高级开发【零声学院】
FFmpeg/WebRTC/RTMP/RTSP/HLS/播放器-音视频流媒体高级开发 学习 音视频流媒体高级开发学习 01音视频基础 [录播]0-音视频开发高级课程简介(22分钟) 免费试学 [录播] ...
- 5G时代必学的WebRTC音视频通话技术
什么是WebRTC ◼ WebRTC(Web Real-Time Communication)是 Google于2010以6829万美 元从 Global IP Solutions 公司购买,并于20 ...
- WebRTC 简单入门与实践
一.前言 WebRTC 技术已经广泛在各个行业及场景中被应用,但对多数开发者来说,实时音视频及相关技术却是比较不常接触到的. 做为一名 Web 开发者,WebRTC 这块的概念着实花了不少时间才搞明白 ...
最新文章
- insert into与insert ignore以及replace into的区别
- AutoMapper用法
- 查询成绩最好的前两名_收藏转发!一线老师用真实数据告诉你,高考成绩和平时成绩的关系...
- hdu 3033(分组背包)
- CVer入门必备:计算机视觉的深度学习实践
- Android 如何调用系统默认浏览器访问
- 在一个C程序中,main()函数可以放在哪?
- Hibernate中的命名SQL查询
- GARFIELD@05-01-2005
- Php开发银行接口之浦发银行
- ZOJ1002-Fire Net(深度优先搜索)
- 导航网站合集 | 你想要的资源它都有
- PyQt4---QTextBrowser
- 接口测试定义以及接口测试常用的工具集合
- java项目启动就调用方法_Java项目启动时执行指定方法的几种方式
- 使用VS2015,office 2007自带的OCR组件来实现OCR功能
- 口袋妖怪金心银魂详细图文攻略(下)及游戏下载
- CSS/HTML制作在网页中持续旋转的六面体
- [分享] Hyper-V 安装Win7激活后黑屏
- Java入门 冒泡排序(第十二天)
热门文章
- matplotlib.pyplot---------Python强大的绘图功能软件
- 记一次小型生产事故 | BeyondComper跨编码方式复制文件内容
- Llama-impala on yarn的中间协调服务
- hibernate管理实体的三个状态
- Js文件中调用其它Js函数的方法
- easyui datagrid local pager 表格本地分页
- [转]VSTO Office二次开发应用程序键盘鼠标钩子
- 洛谷 - P4768 [NOI2018]归程(Kruskal重构树+树上倍增+最短路)
- 分治法——巨人与鬼问题
- TrackFormer解读