学习地址1:https://pan.baidu.com/s/1F4tAlst6Rix-AVI1EmiEAw 提取码:lkso
学习地址2:https://share.weiyun.com/DF5SwWs3 密码:u2h5nv
一、WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌 2010 年以 6820 万美元收购 Global IP Solutions 公司而获得的一项技术。
WebRTC 提供了实时音视频的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。
虽然 WebRTC 的目标是实现跨平台的 Web 端实时音视频通讯,但因为核心层代码的 Native、高品质和内聚性,开发者很容易进行除 Web 平台外的移殖和应用。很长一段时间内 WebRTC 是业界能免费得到的唯一高品质实时音视频通讯技术。
二、WebRTC 功能模块
WebRTC 实现了基于网页的视频会议,标准是 WHATWG 协议,目的是通过浏览器提供简单的 javascript 就可以达到实时通讯(Real-Time Communications (RTC))能力。
①、视频采集—video_capture
源代码在 webrtc\modules\video_capture\main 目录下, 包含接口和各个平台的源代码。
在 windows 平台上,WebRTC 采用的是 dshow 技术,来实现枚举视频的设备信息和视频数据的采集,这意味着可以支持大多数的视频采集设备;对那些需要单独驱动程序的视频采集卡(比如海康高清卡)就无能为力了。
视频采集支持多种媒体类型,比如 I420、YUY2、RGB、UYUY 等,并可以进行帧大小和帧率控制。
②、视频编解码—video_coding
源代码在 webrtc\modules\video_coding 目录下。
WebRTC 采用 I420/VP8 编解码技术。VP8 是 google 收购 ON2 后的开源实现,并且也用在 WebM 项目中。VP8 能以更少的数据提供更高质量的视频,特别适合视频会议这样的需求。
③、视频加密—video_engine_encryption
视频加密是 WebRTC 的 video_engine 一部分,相当于视频应用层面的功能,给点对点的视频双方提供了数据上的安全保证,可以防止在 Web 上视频数据的泄漏。
视频加密在发送端和接收端进行加解密视频数据,密钥由视频双方协商,代价是会影响视频数据处理的性能;也可以不使用视频加密功能,这样在性能上会好些。
④、视频媒体文件—media_file
源代码在 webrtc\modules\media_file 目录下。
该功能是可以用本地文件作为视频源,有点类似虚拟摄像头的功能;支持的格式有 Avi,另外 WebRTC 还可以录制音视频到本地文件,比较实用的功能。
⑤、视频图像处理—video_processing
源代码在 webrtc\modules\video_processing 目录下。
视频图像处理针对每一帧的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。
⑥、视频显示—video_render
源代码在 webrtc\modules\video_render 目录下。
在 windows 平台,WebRTC 采用 direct3d9 和 directdraw 的方式来显示视频,只能这样,必须这样。
⑦、网络传输与流控
对于网络视频来讲,数据的传输与控制是核心价值。WebRTC 采用的是成熟的 RTP/RTCP 技术。
三、WebRTC的工作原理
WebRTC的工作方式的理解需要涉及多个关键组件。这些组件相互协作,形成了一个强大的,允许浏览器和应用程序进行实时通信的框架。让我们详细探讨一下每个部分:
2.1 信令(Signaling)
尽管信令并不直接包含在WebRTC的技术规范中,但它在实现实时通信的过程中起到了核心作用。信令是用于在WebRTC客户端之间协调、建立通信的过程,包括了会话控制(发起和结束)、网络数据(IP和端口)和媒体数据(编解码器、带宽和媒体类型等SDP信息)等元数据的交换。
WebRTC并没有规定特定的信令协议或方法,这给了开发者很大的灵活性,他们可以选择最适合他们需求的协议,如WebSocket、SIP等。然而,需要注意的是,信令过程需要一个服务器来中继消息,而这个服务器是开发者需要自己提供的。
2.2 网络地址转换穿越(NAT Traversal)
WebRTC设计的初衷就是要让设备能够相互通信,不论这些设备在何处、是否在NAT防火墙之后。为了实现这一目标,WebRTC引入了网络地址转换穿越(NAT Traversal)的技术。这一过程主要依赖于两种协议,即会话穿越工具(STUN)和中继NAT穿越工具(TURN)。
STUN服务器的作用是帮助设备发现自己的公网IP地址和端口。然而,STUN不能在所有情况下都工作,特别是当NAT防火墙的策略比较严格时。这时,TURN服务器就派上用场了。TURN服务器实际上扮演了媒体流的中继角色,将数据从发送端传到接收端。