webrtc (一) 理论入门了解
WebRTC(Web Real-Time Communication)是 Google于2010你那以$6829万从 Global IP Solutions 公司购买,并于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。
webrtc 是视频会议的霸主地位。无论windows,linux,mac,android,Java,kt,flutter,小程序,iOS 只要能调用c&c++ 就可以使用。本身就是一个完整的框架和解决方案。
主要解决一个问题,实时的音视频应用。点对点通信
一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。
需要的协议:
http,tcp/ip,udp,websocket,sdp,rtp,srtp,sturn,turn,ice,tls,dtls,sctp......一整套协议还是超级多。
webrtc通信整体解决方案
① 信令服务器
1)为什么需要信令服务器?
1.在网络上找到需要通信的对方
2.确定通信的方式,或时序
2)为什么WebRTC不去实现信令交换?
不同的项目自己用的协议和业务逻辑都是不一样的
② NAT 穿越(打洞)
网络地址转换(Network Address Translation,简称NAT)是一种在IP分组通过路由器或防火墙时重写源IP地址或/和目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。
NAT穿越是广泛用于P2P领域的通信方式,在视频通话过程中,NAT穿越也在内外网消息通信中起到了至关重要的作用。
ICE,全名叫交互式连接建立(Interactive Connectivity Establishment),一种综合性的NAT穿越技术,它是一种框架,可以整合各种NAT穿越技术如STUN、TURN(Traversal Using Relay NAT 中继NAT实现的穿透)。ICE会先使用STUN,尝试建立一个基于UDP的连接,如果失败了,就会去TCP(先尝试HTTP,然后尝试HTTPS),如果依旧失败ICE就会使用一个中继的TURN服务器。
理解概念
两台设备进行点对点的通信,就不会走中转服务器,服务器的负担会变小。
但是有一个问题?
假设两个手机都是公司的内网,想要通信,在内网出去的时候,内网很多机器对外公用的一个IP地址,所以要确认一个IP地址。这个时候,我们就需要NAT穿越
。
假设NAT(2)和NAT(3),那么IP地址的确定和网络线路怎么走,就需要ICE参与进来。
两台手机简历了通信通道,本来是可以直接通信的。但是NAT是会有失败的可能性的,所以通过ICE进行转发。ICE 服务器通过 stun-turn,将三者绑定到一起。如果点对点通信能连上,就让两台手机自己交流。如果连不上,就走ICE的中继服务。
利用ICE进行测试,HTTP->HTTPS-> 中继TURN服务。
而我们,实际,只需要知道ICE Server 提供的IP地址,用户名,密码,就足够了。
信令服务
两个手机在建立链接的时候,不知道和谁建立链接,就需要绿色线条的信令服务器参与,在网络中找到通信双方彼此是谁,然后确定通信的方式。具体的过程不管。
所以自己可以设定自己的协议demo
client: join(加入房间) ,leave(离开房间),message发消息
sever:joined(客户端加入),leved(客户端离开),otherjoin(其他人加入),bye(有人离开了),full(房间满)
WebRTC通信过程
媒体协商
A,视频
h264,vp8
B, 视频
h264,h265
在AB进行通信,编解码,通过协商过程,获取交集h264,这个过程就叫做协商。
这个过程用到的会话描述协议,SDP。
通过SDP发出Offer ,本机保存一份,发送给B,B存下来,然后生产出自己的协商后的相应Answer,发送给A端,这样A就知道交集是什么。如果交集有多个,可以自己控制,优化和默认选择哪一个。
协商通过,就会通过ice服务器,确定A和B是走中继还是点对点。
信令设计
join leave message(offer,answer,candidate)
joined leaved otherjoin bye full
总结
我们需要了解的基本知识
- webrtc 整体架构与运行机制
- Nodejs服务器环境配置
- 房间服务器配置
- 信令服务器设计方案
- socket.io实现移动端与浏览器端相互通信聊天室
下篇文章继续。