📜  WebRTC教程(1)

📅  最后修改于: 2023-12-03 15:35:40.792000             🧑  作者: Mango

WebRTC教程

WebRTC (Web Real-Time Communication) 是一种基于Web的实时通信技术,可以实现浏览器之间的点对点音频、视频通话以及数据共享。它包括了音频、视频、数据在内的多媒体实时通信方式,可以帮助开发者快速构建面向浏览器的实时通信应用。

WebRTC有哪些应用场景?
  • 视频会议:支持较多人的多方视频通话
  • 远程教育:一个教师可以和多个学生进行一对多或者多对多的音视频教学
  • 远程医疗:通过实时视频通话的方式,可以实现专家远程会诊以及病患的随时就诊
  • 物联网: WebRTC可以为物联网设备提供实时通讯的能力,实现设备之间的即时通信
WebRTC的组成部分

WebRTC 由三个主要组成部分组成:

  • 媒体捕获:从用户的摄像头、麦克风等媒体设备与相关资源中获取音频、视频或其他数据。
  • 线程传输:利用网络通过传输、编解码、数据传输等线程将音视频流传输到对方终端。
  • 显示:将接收的音频、视频或其他数据呈现在对方的终端上,如浏览器、手机等。
如何使用WebRTC?
基础概念

SDP (Session Description Protocol)

SDP是WebRTC中通信的基础协议,负责在参与通信的设备之间传输信息,如媒体数据类型、网络地址等。

ICE (Interactive Connectivity Establishment)

ICE是WebRTC中进行NAT(Network Address Translation,网络地址转换)遍历,寻找有效通道来建立点对点连接的流程。ICE在建立点对点连接时,首先进行协商,接下来在远端设备上尝试直接连接,如果直接连接不成功那么ICE会在通过P2P服务器进行,然后在本地设备上进行尝试连接,最后如果连接成功,那么就建立了一个点对点的连接。

STUN (Session Traversal Utilities for NAT)

STUN是ICE部分的一个协议。STUN服务器负责返回远端设备的公网地址和端口,供本地设备使用。如UDP协议下,就不能使用自己的私有IP和局域网地址和端口号,STUN协议提供了一种方法来获得映射到互联网公网上的公网地址和端口号。

TURN (Traversal Using Relays around NAT)

TURN是ICE部分的另一个协议。TURN可以代理所有数据流,就是说所有数据流都经过中央服务器来完成。TURN主要用于特殊网络环境下使用,比如双方设备在相同的内网,TURN 可以通过虚拟IP地址解决 NAT 遍历问题。

开始使用WebRTC
  1. 创建本地流
// 创建本地流
navigator.mediaDevices.getUserMedia({video: true, audio: false})
.then(function(stream) {
   // 将摄像头连接到video标签中
   video.srcObject = stream;
})
.catch(function(err) {
   console.log("视频出错,错误信息:" + err);
});
  1. 创建连接对象
// 创建连接对象
var peerConnection = new RTCPeerConnection();
  1. 添加候选者
// 添加候选者
peerConnection.addIceCandidate(candidate)
  1. 建立连接
// 建立连接
peerConnection.createOffer(function(offer) {
    peerConnection.setLocalDescription(new RTCSessionDescription(offer));
    socket.send(JSON.stringify({type: "offer", offer: offer}));
}, function(error) {
    console.log("Error creating offer:", error);
});
WebRTC的优缺点
优点
  1. 支持实时通信
  2. 无需安装额外的软件或插件
  3. 支持多种设备和平台
  4. 支持加密通信,保证通信的安全
缺点
  1. 对性能要求较高,需要优化硬件和软件
  2. 浏览器的支持度不够高,需要根据浏览器的差异进行适配
  3. 需要一定的技术储备,在使用、开发中需要掌握多方面的知识

总之,WebRTC具有很高的实时性和交互性,非常适合需要实时通信的场景,尤其是在线教育、远程医疗等需要远程实时互动的场景,未来的应用前景非常可观。