webrtc 入门

RTC

RTC(Real-time Communications)实时通信,是实时音视频的一个简称。

WebRTC 是什么

WebRTC (Web Real-Time Communications) 是 RTC 的一部分,是一项实时通信技术,它容许网络应用或者站点,在不借助两头媒介的状况下,建设浏览器之间点对点(Peer-to-Peer)的关联,实现视频流/音频流或者应用数据的传输。

使用场景

  • 音视频通话
  • 视频/电话会议
  • 近程拜访主机
  • 在线教育(直播连麦,屏幕录制,共享远程桌面

WebRTC架构

在这里插入图片描述

WebAPI

提供给WEB使用的java接口。

C++ API

跨平台的C++接口。

会话管理

WebRTC在两个Peer之间通信之前需要创建一个Session。这一层就负责session的创建、管理。

音频引擎

音频引擎(VoiceEngine)负责WebRTC的音频采集、编解码、传输控制和音频信号处理。音频编解码部分支持iSAC和iLBC,语音信号处理部分支持回声消除(AcousticEchoCancceler,AEC)和降噪(NoiseReduction,NR)。

视频引擎

视频引擎(VideoEngine)负责WebRTC的视频采集、编解码、流控和图像信号处理。视频图像编解码部分支持VP8、H264(默认是VP8)。视频图像处理部分是对采集到的图像进行颜色增强、降噪等处理来提升图像清晰度,流控部分是使用jetter buffer和FEC来减小网络抖动和丢包带来的影响。

网络传输

网络传输负责音视频数据和应用数据的传输,在应用层媒体数据(音频、视频等)使用 Secure Real-time Transport Protocol (SRTP) 传输,而非媒体数据(文字、图片等)使用Stream Control Transmission Protocol (SCTP)传输。在传输层使用UDP协议。而在应用层和传输层之间,WebRTC使用DTLS(Datagram Transport Layer Security) 解决UDP网络传输的安全机制。另外还通过整合了STUN和TURN的ICE协议来实现NAT转换和公网穿透。

代码结构

在这里插入图片描述

 基本概念

媒体协商

每个客户端的多媒体能力不同,因此两个客户端想要通信就需要先了解相互的多媒体能力,协商出大家都支持的能力集,然后才能通信。WebRTC使用SDP协议来协商音视频能力。

offer 和 answer 

发动端发送的 SDP 称为 Offer,接收端发送的 SDP 称为 Answer。

ICE

当媒体协商完成后,WebRTC 就开始建设网络连接,其过程称为 ICE(Interactive Connectivity Establishment)交互式连贯建设。

ICE 在调用 setLocalDescription() 后就开始了,其操作过程如下:

  1. 收集 Candidate;
  2. 替换 Candidate;
  3. 按优先级尝试建立关联。

Candidate

和对端建立连接前,需要获取对端的一些基本信息,如 IP 地址、端口号、传输协议、加密算法等。而 Candidate 正是 WebRTC 用来形容它能够关联的远端的基本信息,因而 Candidate 是包含 IP 地址、端口号、协议的一个信息集。

在 WebRTC 中有三种类型的 ICE 候选者(Candidate)

  1. 主机候选者:示意网卡本人的 IP 地址及端口。通过设施网卡获取,优先级最高。在 WebRTC 底层首先会尝试本地局域网内建设连贯。
  2. 反射候选者:示意通过 NAT 之后的外网 IP 地址和端口,由 ICE(STUN)服务器获取,依据服务器的返回状况,来综合判断并晓得本身在公网中的地址。其优先级低于主机候选者,当 WebRTC 尝试本地连接不通时,会尝试通过反射候选者取得的 IP 地址和端口进行连贯。
  3. 中继候选者:示意的是中继(TURN)服务器的转发 IP 地址与端口,由 ICE 中继服务器提供。优先级最低,前两个都不行则会按该种形式。

在新建RTCPeerConnection时可在构造函数指定 ICE 服务器地址,没有指定的话则意味着这个关联只能在内网进行。

CandidatePair

WebRTC 收集好 Candidate 后,会通过信令将它们发送给对端。对端接收到这些 Candidate 后,会与本地的 Candidate 组成 CandidatePair(即候选者配对)。有了 CandidatePair,WebRTC 就能够开始尝试建立连接了。这里须要留神的是,Candidate 的发送不是等所有 Candidate 收集好后才进行的,而是收集到一个就发送。

CandidatePair,候选者配对,即一个本地 Candidate,一个远端 Candidate

当 WebRTC 造成 CandidatePair 后,便开始尝试进行关联。一旦 WebRTC 发现其中有一个能够连通的 CandidatePair 时,它就不再进行关联尝试了,但发现新的 Candidate 时依然会发送给对端。

关联

TCP是面向连接的,一个连接只涉及两个IP地址间的通信,而SCTP是面向关联的,关联是指两个端点之间的一次通信,因此可以涉及不止两个IP地址,当然也就可以有多个连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值