基于WebRTC的P2P语音视频通信设计
2020-09-10闫新惠
摘要:P2P是指网络上双方直接连接通信,不经过中间服务器中转的技术。P2P有很多应用,最常见的bittorrent和eDonkey下载就是使用P2P技术。双人语音视频通信的场景特别适合采用P2P技术,无需服务器,延迟快,实时性强,安全性也可得到保障。WebRTC是一个开放源码的语音视频通信框架,其提供P2P语音视频通信的基本功能,通过此框架可以方便快速的搭建自己的视频软件。本文介绍了基于WebRTC实现的视頻通信技术。
关键词:WebRTC;P2P;语音视频通信;设计
1.WebRTC技术与主要对象
1.1.MediaDevices设备对象
用来操作音视频设备的对象,提供高度的抽象化,主要方法为getUserMedia,可以返回一个MediaDevices设备对象,并通过它获取MediaStream流对象,这是音视频流的抽象接口。通过给getUserMedia传入不同参数可以控制打开的具体设备,例如手机前后摄像头,PC内置mic;外接mic/usb mic;外放喇叭或耳机等等。对于找不到的设备有对应异常对象处理。
1.2.RTCPeerConnection连接对象
RTCPeerConnection连接对象代表一个与远端设备WebRCT连接的一个对象。WebRTC的底层连接可以基于多个协议,例如UDP或WebSocket,但是这里API已经完全封装,上层不关心具体连接底层协议。
连接的双方之间通过交换SDP(Session Description Protocol)来交换获取对方媒体信息,以确定一个双方都能接受的多媒体协议。RTCPeerConnection的createOffer与createAnswer方法会返回一个RTCSessionDescriptionInit字典,其中包含了PeerConnection的SDP信息。连接建立后便可以通过此连接传输音视频数据。
RTCPeerConnection连接的建立过程如图2所示:
1.3.RTCDataChannel数据频道
RTCDataChannel接口代表了用于点对点数据传输的双向信息通道,它是RTCConnection连接对象的更上层封装,每一个RTCDataChannel都和一个RTCPeerConnection相结合,但一个连接可以同时含有多个DataChannel,理论上限制最多能有65535个DataChannel,实际情况则取决于浏览器和具体设备)。
多个RTCDataChannel实际上复用了一个RTCConnection连接,类似于多路复用的概念,就像马路划分多个车道一样,这样在一个连接里存在多个通道,语音视频文本等数据可以分开传输,互相影响比较少。
2.应用程序
基于WebRTC构造应用比较简单,首先需要一个公网服务器提供NAT网络地址转换服务。服务端NAT穿透程序有RFC标准方案:ICE,ICE同时支持基于UDP的STUN协议和基于TCP
的TURN协议,并且能根据不同网络环境而选择最高效的连接方式。WebRTC中RTCConnection对象完全实现了ICE方案,所以一旦RTCConnection对象建立成功,则表示ICE连接成功。
3.总结
本文介绍了P2P技术和基于此的WebRTC框架,重点分析了WebRTC中的3个重要对象。依靠这些技术,可以方便的建立音视频通信的软件,我们提供一个示例构建基于WebRTC的应用程序。
作者简介:闫新惠(1974-),女(汉),山东省泰安市人,讲师,硕士,主要研究方向为计算机网络技术。