作者:Tsahi Levent-Levi(原文链接)
翻译:刘通
原标题:How WebRTC Works
WebRTC工作的时候就像变魔术一样。你将你的浏览器跳转到一个URL。然后让另一个人也将他的浏览器跳转到这个URL,然后,你们俩就能看见彼此了。很酷对吧。
我将要从几个不同的角度出发解释一下WebRTC是如何工作的,希望能够给你一个对WebRTC工作方式的清楚的认识。
WebRTC基础概念
这些是我在谈论WebRTC时候提起的第一件事:
(WebRTC提供网络浏览器原生的实时通信;WebRTC是一个带有JavaScript API的媒体引擎)
WebRTC是直接在Web浏览器内运行实时通信(音频,视频和任意数据)的手段。并且不需要任何插件或者下载额外的程序就能做到这一点。
从另一个角度来看,WebRTC只是一个带有JavaScript API的媒体引擎,所以每个人都知道如何使用它(尽管浏览器的实现不尽相同)。
但是好像这也没有什么。下面让我们从浏览器的角度出发,看看WebRTC真正独特之处在哪里。
如果直到现在,当你想到一个Web应用程序的时候,你考虑的还是像下图一样的客户端服务器模型。
你的浏览器作为客户端,它连接到服务器向其请求数据,让我们把这个过程叫做请求。然后服务器必须要发送一个回复。我们现在已经比使用WebSockets要先进了,但是仍然是相似的。如果我想给正在查看自己浏览器的朋友发送消息,则需要将消息发送到服务器,然后从服务器处发送给我朋友。这个工作流程与现实生活中的邮局很像。
因为我们仍然需要以某种方式从一个浏览器发送数据导另一个浏览器,所以我们需要能够定位到彼此的地址。在信令过程结束之后,我们就可以直接在两个浏览器之间发送消息,而不需要Web服务器在中间进行传递。很神奇对吧。
在加载网页的时候,我们现在已经习惯了浏览器为了渲染网页而抓取100个不同的资源。这些资源可以来自各种不同的服务器,持有静态文件的CDN,以及一些第三方站点。也就是说,这主要可以归结为三种类型的文件:
1. HTML和CSS,他们够成了网站的主要内容和风格
2. JS,通常运行网站的交互部分
3. 图像文件以及其他类似的资源
它最终是静态的东西与代码的混合产物。
WebRTC有所不同。
它需要通过网络进行两种类型的交互:信令和媒体。
信令在HTTPS连接或者WebSocket的时候进行。通过JS代码实现。你在信令过程中需要做的工作时决定用户要如何找到对方并开始通话。
关于信号的一个重要的事情:它不是WebRTC本身的一部分。开发人员需要决定如何传递创建WebRTC会话所需的信息。WebRTC将生成它需要发送的信息数据,并且处理这些信息位,但在网络上并不会对它们真正做什么事情。WebRTC今天将这些信息打包成SDP消息。
而实际的媒体在以个完全不同的媒介和连接上。它通过媒体通道传输,要么使用SRTP(用于语音和视频),或者使用SCTP(用于数据通道)。
媒体与信令不同,采取不同的路线,并且做法完全不同。对于浏览器,网络,以及你要用的服务器来说的确是这样的。
未完待续……