移动 前端 Python Android Java网络协议设计与实现webrtc

webrtc (一) 理论入门了解

2021-03-26  本文已影响0人  zcwfeng

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参与进来。

2021-03-25 14.30.30.png

两台手机简历了通信通道,本来是可以直接通信的。但是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

总结

我们需要了解的基本知识

  1. webrtc 整体架构与运行机制
  2. Nodejs服务器环境配置
  3. 房间服务器配置
  4. 信令服务器设计方案
  5. socket.io实现移动端与浏览器端相互通信聊天室

下篇文章继续。

上一篇下一篇

猜你喜欢

热点阅读