什么是 WebRTC
WebRTC 是一组 JavaScript API,可以在两个浏览器之间建立点对点连接,实现音频和视频等数据的传输,可以用它创建有语音/视频通话功能的应用程序。WebRTC 在 2021 年被 W3C 和 IETF 发布为正式标准,而且得到了大多数主流浏览器的支持。
在 WebRTC 诞生之前,开发实时音视频应用的成本是非常高,需要考虑的技术问题很多,如音视频的编解码,数据传输延时、丢包、网络抖动、回音处理和消除等,如果要兼容浏览器端的实时音视频通信,还需要额外安装插件。
WebRTC 的特别之处是,一旦建立了连接,就可以直接在浏览器之间实时传输数据,不需要借助服务器,因此降低了延迟,所以用户都喜欢用 webRTC 直接传输音视频。
WebRTC 与 WebSockets 的区别
WebSockets
使用WebSockets也可以建立点对点连接,实时传输数据,但这种连接是在客户端和服务器之间。因此,如果我向某一对等点发送消息,这个消息会先传送到服务器,然后服务器再把这个消息发送给另一个对等点。通常来说,这种传输非常快,如果大家发送的是聊天信息或某些通知,即使有一些延迟也注意不到。但如果我们用
WebSockets传输音视频情况就不一样了。用WebSockets传输音视频时,即使有非常轻微的延迟也会非常明显,还会导致很多其他问题。当视频数据到达服务器并返回对等点时,用户会感觉到明显的延迟。WebRTC
WebRTC的优势是在两个浏览器之间建立连接并直接交换数据,消除了服务器可能导致的延迟,WebRTC还使用了用户数据报协议(UDP),这些都有利于数据的快速传输。WebRTC使用UDP,但是用UDP传输重要数据会有点不太可靠。UDP的优势在于传输数据非常快,劣势在于它不检查数据是否被成功接收。所以,可以用UDP来传输视频,就算传输过程中丢失了几帧,也没啥大问题;但如果是发送文件,丢失几个字节的数据就会导致整个文件的损坏。WebRTC没有内置信令,所以只用WebRTC没法建立点对点的连接,但一旦建立了连接,WebRTC就可以处理所有问题,至于如何传输初始数据来连接两个对等点则由我们决定。
通常 WebRTC 会与 WebSocket 配合使用,WebSocket 的作用主要是用来交换客户端的 SDP 与网络信息,WebSocket 传输的内容与真正通信数据无关,只是协助 WebRTC 建立连接。
![[]](https://www.zhangqin.tech/2022/12/16/%E5%89%8D%E7%AB%AF/HTML5%E6%A0%87%E5%87%86%E4%B9%8BWebRTC/WebRTC%E4%B8%8EWebSockets%E5%AE%9E%E7%8E%B0%E9%9F%B3%E8%A7%86%E9%A2%91%E9%80%9A%E8%AF%9D.gif)