WebRTC入门

                                                                       WebRTC入门


  WebRTC的历史

Web的最后一个主要挑战之一是通过语音和视频实现人与人之间的通信:实时通信,简称RTC。RTC在Web应用程序中应与在文本输入中输入文本一样自然。没有它,我们在创新和开发新的人们互动方式方面的能力将受到限制。

从历史上看,RTC一直是公司性的并且很复杂,需要昂贵的音频和视频技术才能在内部获得许可或开发。将RTC技术与现有内容,数据和服务集成在一起非常困难且耗时,尤其是在Web上。

Gmail视频聊天在2008年开始流行,2011年Google引入了环聊,该环聊使用Google Talk服务(与Gmail一样)。Google收购了GIPS,这是一家开发了RTC所需的许多组件的公司,例如编解码器和回声消除技术。Google开源了GIPS开发的技术,并与IETF和W3C的相关标准机构合作,以确保行业共识。2011年5月,爱立信构建了WebRTC的第一个实现

WebRTC为实时,无插件的视频,音频和数据通信实施了开放标准。需求是真实的:

许多Web服务使用RTC,但需要下载,本机应用程序或插件。包括Skype,Facebook和Google Hangouts。

下载,安装和更新插件非常复杂,容易出错且令人讨厌。

插件很难部署,调试,故障排除,测试和维护,并且可能需要许可以及与复杂,昂贵的技术的集成。首先说服人们安装插件通常很困难!

WebRTC项目的指导原则是其API应该是开源的,免费的,标准化的,内置在Web浏览器中的,并且比现有技术更有效。

我们现在在哪?

WebRTC用于各种应用程序,例如WhatsApp,Facebook Messenger,appear.in和TokBox等平台。WebRTC也已与WebKitGTK +Qt本机应用程序集成。

WebRTC实现了三个API:

*MediaStream(又名getUserMedia)

*RTCPeerConnection

*RTCDataChannel

API在两个规范中定义:

*WebRTC

*getUserMedia

Chrome,Safari,Firefox,Edge和Opera在移动设备和台式机上都支持这三种API。

getUserMedia:访问数据流,例如来自用户的相机和麦克风的数据流。

RTCPeerConnection:是WebRTC组件,用于处理对等点之间的流数据的稳定和高效的通信。音频或视频呼叫,具有用于加密和带宽管理的功能。

RTCDataChannel:除了音频和视频,WebRTC还支持其他类型数据的实时通信。RTCDataChannel API支持低延迟和高吞吐量的对等数据交换。通用数据的对等通信。

我的第一个WebRTC

WebRTC应用程序需要做几件事:

获取流音频,视频或其他数据。

获取诸如IP地址和端口之类的网络信息,并与其他WebRTC客户端(称为对等方)进行交换,以启用连接,即使通过NAT和防火墙也是如此。

协调信令通信以报告错误并启动或关闭会话。

交换有关媒体和客户端功能的信息,例如分辨率和编解码器。

交流流音频,视频或数据。

为了获取和传递流数据,WebRTC实现了以下API:

MediaStream:访问数据流,例如来自用户的相机和麦克风的数据流。

RTCPeerConnection:音频或视频呼叫,具有用于加密和带宽管理的功能。

RTCDataChannel:通用数据的对等通信。

信令:会话控制,网络和媒体信息


WebRTC使用RTCPeerConnection在浏览器(也称为对等设备)之间通信流数据,但还需要一种机制来协调通信并发送控制消息,该过程称为信令。WebRTC 指定信令方法和协议:信令不是RTCPeerConnection API的一部分

相反,WebRTC应用程序开发人员可以选择他们喜欢的任何消息协议,例如SIP或XMPP,以及任何适当的双工(双向)通信通道。

信令用于交换三种类型的信息:

会话控制消息:初始化或关闭通信并报告错误。

网络配置:对于外界,我的计算机的IP地址和端口是什么?

媒体功能:我的浏览器及其要与之通信的浏览器可以处理哪些编解码器和分辨率?

在开始对等流传输之前,必须成功完成通过信令进行的信息交换。

1. 客户端通过信令服务器, 进行offer SDP 握手

SDP(Session Description Protocol):描述建立音视频连接的一些属性,如音频的编码格式、视频的编码格式、是否接收/发送音视频等等SDP 是通过webrtc框架里面的PeerConnection所创建

2. 客户端通过信令服务器, 进行Candidate 握手

Candidate:主要包含了相关方的IP信息,包括自身局域网的ip、公网ip、turn服务器ip、stun服务器ip等Candidate 是通过webrtc框架里面的PeerConnection所创建  

3 客户端在SDP 和Candidate握手成功后, 就建立起一个P2P端对端的链接, 视频流就能直接传输, 不需要经过服务器啦

P2P信息会话

1.Amy端通过 createOffer 生成 SDP 描述

2.Amy通过 setLocalDescription,设置本地的描述信息

3.Amy将 offer SDP 发送给用户Bob

4.用户Bob通过 setRemoteDescription,设置远端的描述信息

5.Bob用户通过 createAnswer 创建出自己的 SDP 描述

6.Bob用户通过 setLocalDescription,设置本地的描述信息

7.Bob用户将 anwser SDP 发送给主播Amy

8.Amy端通过 setRemoteDescription,设置远端的描述信息。

9.通过SDP握手后,两端之间就会建立起一个端对端的直接通讯通道。

由于我们所处的网络环境错综复杂,用户可能处在私有内网内,使用p2p传输时,将会遇到NAT以及防火墙等阻碍。这个时候我们就需要在SDP握手时,通过STUN/TURN/ICE相关NAT穿透技术来保障p2p链接的建立

RTCPeerConnection

RTCPeerConnection是WebRTC组件,用于处理对等点之间的流数据的稳定和高效的通信。

下面是WebRTC架构图,显示了RTCPeerConnection的角色。您会注意到,绿色部分很复杂!


WebRTC架构

从该图中可以理解的主要事情是RTCPeerConnection使Web开发人员免受潜在的各种复杂问题的困扰。WebRTC使用的编解码器和协议进行了大量工作,即使在不可靠的网络上也可以进行实时通信:

丢包隐藏 回声消除 带宽适应性 动态抖动缓冲 自动增益控制 降噪抑制 图像“清洁”。

RTCPeerConnection plus服务器

在现实世界中,WebRTC需要服务器(无论多么简单),因此可能发生以下情况:

* 用户彼此发现并交换“真实世界”的详细信息,例如姓名。

* WebRTC客户端应用程序(对等)交换网络信息。

* 对等方交换有关媒体的数据,例如视频格式和分辨率。

* WebRTC客户端应用程序遍历NAT网关和防火墙。

换句话说,WebRTC需要四种服务器端功能:

用户发现和交流。

发信号。

NAT /防火墙遍历。

对等通信失败时中继服务器。

NAT遍历,对等网络以及为用户发现和信令构建服务器应用程序的要求不在本文讨论范围之内。可以说ICE框架使用STUN协议及其扩展TURN来使RTCPeerConnection能够应对NAT穿越和其他网络问题。

ICE是用于连接对等方(例如两个视频聊天客户端)的框架。最初,ICE尝试通过UDP以尽可能短的延迟直接连接同级。在此过程中,STUN服务器只有一项任务:使NAT后的对等方能够找到其公共地址和端口。


寻找连接候选者

如果UDP失败,ICE将尝试TCP。如果直接连接失败(尤其是由于企业NAT穿越和防火墙),ICE将使用中间(中继)TURN服务器。换句话说,ICE将首先使用带有UDP的STUN直接连接对等方,如果失败,将回退到TURN中继服务器。“寻找候选对象”一词是指查找网络接口和端口的过程


WebRTC数据通路

RTCDataChannel

除了音频和视频,WebRTC还支持其他类型数据的实时通信。RTCDataChannel API支持低延迟和高吞吐量的对等数据交换。

该API有很多潜在的用例

远程桌面应用程序 实时文字聊天 文件传输 分散网络

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352