WebRtc(⽹页即时通讯技术)知识点总结
前⾔
WebRTC,名称源⾃⽹页实时通信(Web Real-Time Communication)的缩写,简⽽⾔之它是⼀个⽀持⽹页浏览器进⾏实时语⾳对话或视频对话的技术。并且还⽀持跨平台:windows,linux,mac,android,iOS。
实现原理
P2P连接模式
⼀般我们传统的连接⽅式,都是以服务器为中介的模式:
类似http协议:客户端<——>服务端(当然这⾥服务端返回的箭头仅仅代表返回请求数据)。
进⾏即时通讯时,进⾏⽂字、图⽚、录⾳等传输的时候:客户端A——服务器——客户端B。
⽽点对点的连接恰恰数据通道⼀旦形成,中间是不经过服务端的,数据直接从⼀个客户端流向另⼀个客户端:
客户端A——客户端B ... 客户端A——客户端C ...(可以⽆数个客户端之间互联)
这个过程就像⾳视频通话的应⽤场景,我们服务端确实是没必要去获取两者通信的数据,⽽且这样做有⼀个最⼤的⼀个优点就是,⼤⼤的减轻了服务端的压⼒。
⽽WebRTC就是这样⼀个基于P2P的⾳视频通信技术。
客户端A与B建⽴p2p连接的过程
1.A和B连接上服务端,建⽴⼀个TCP长连接(任意协议都可以,WebSocket/MQTT/Socket原⽣/XMPP)
,为了省事,直接采⽤WebSocket,这样⼀个信令通道就有了。
2.A从服务器获得ice server同时⽣成包含session description(SDP)的offer,发送给Socket服务端。
3.Socket服务端把A的offer和candidate转发给B,B会保存下A这些信息。
4.然后B发送包含⾃⼰session description的answer(因为它收到的是offer,所以返回的是answer,但是内容都是SDP)和ice candidate给Socket服务端。
5.Socket服务端把B的answer和ice candidate给A,A保存下B的这些信息。
WebRTC的服务器
WebRTC⾄少有两件事必须要⽤到服务器:
1、客户端之间交换建⽴通信的元数据(信令)必须通过服务器。
我们在A和B需要建⽴P2P连接的时候,⾄少要服务器来协调,来控制连接开始建⽴。⽽连接断开的时候,也需要服务器来告知另⼀端P2P 连接已断开
2、为了穿越NAT和防⽕墙。
如果客户端A想给客户端B发送数据,则数据来到客户端B所在的路由器下,会被NAT阻拦,这样B就⽆法收到A的数据了。
webrtc是通过 ICE 这套框架来处理复杂的⽹络环境,
如果想启⽤这个功能,你必须让你的应⽤程序传服务器的URL:
ICE试着最好的路径来让客户端建⽴连接,他会尝试所有可能的选项,然后选择最合适的⽅案,
ICE⾸先尝试P2P连接,如果失败就会通过Turn服务器进⾏转接。
信令的作⽤
⽤来控制通信开启或者关闭的连接控制消息
发⽣错误时⽤来彼此告知的消息
媒体流元数据,⽐如像解码器、解码器的配置、带宽、媒体类型等等
⽤来建⽴安全连接的关键数据
外界所看到的的⽹络上的数据,⽐如IP地址、端⼝等
信令的类型
Offer:建⽴点对点的连接时,发起端(A客户端)需要发送的信令
Answer:建⽴点对点的连接时,被叫端(B客户端)需要发送的信令
Bye:点对点的连接断开时,发送的信令
会话描述协议(Session Description Protocal,简称SDP)
信令的主要内容的格式都遵循会话描述协议
1)会话的名称和⽬的
2)会话存活时间
3)包含在会话中的媒体信息,包括:
媒体类型(video, audio, etc)
传输协议(RTP/UDP/IP, H.320, etc)
媒体格式(H.261 video, MPEG video, etc)
多播或远端(单播)地址和端⼝
4)为接收媒体⽽需的信息(addresses, ports, formats and so on)
5)使⽤的带宽信息
webrtc浏览器6)可信赖的接洽信息
⼀个SDP的信令的内容⼤致上如下:
实时传输控制协议(Real-time ControlProtocol,RTCP)
RTP/RTCP协议是流媒体通信的基⽯。RTP协议定义流媒体数据在互联⽹上传输的数据包格式,⽽RTCP协议则负责可靠传输、流量控制和拥塞控制等服务质量保证。在WebRTC项⽬中,RTP/RTCP模块作为传输模块的⼀部分,负责对发送端采集到的媒体数据进⾏进⾏封包,然后交给上层⽹络模块发送;在接收端RTP/RTCP模块收到上层模块的数据包后,进⾏解包操作,最后把负载发送到解码模块。因
此,RTP/RTCP 模块在WebRTC通信中发挥⾮常重要的作⽤。
Sdp协议内规定的视频传输控制协议就是rtcp

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。