Skip to content

什么是webRTC?

WebRTC(Web Real-Time Communication)是一种用于在Web浏览器之间实时传输音频、视频和数据的开放标准和技术集合。 WebRTC 提供了一组 API 和协议,使得开发者可以直接在Web浏览器中实现点对点的实时通信,而无需使用第三方插件或应用程序。它通过使用浏览器内置的音频、视频和数据通道,实现了实时的音视频传输和数据传输。 主要特点和功能:

  1. 实时音视频通信:WebRTC 可以在不同的浏览器之间直接传输音频和视频流,实现实时的语音通话和视频通话。
  2. 数据传输:除了音视频流,WebRTC 还提供了可靠的数据传输通道(DataChannel),可以用于传输任意类型的数据。
  3. 点对点通信:WebRTC 的设计目标之一是支持点对点的通信,即直接在浏览器之间建立连接,不需要经过服务器的转发。
  4. 安全性:WebRTC 内置了强大的安全性机制,包括加密和身份验证,以确保通信过程的机密性和完整性。
  5. 跨平台支持:WebRTC 支持在不同的平台和设备上进行实时通信,包括桌面浏览器、移动浏览器和移动应用程序。

WebRTC 在实时通信、视频会议、在线教育、远程协作、在线游戏和物联网等领域有着广泛的应用。它为开发者提供了强大的工具和标准,使得构建实时通信应用变得更加简便和可靠。

音视频采集

WebRTC使用getUserMedia获取摄像头与话筒对应的媒体流对象MediaStream,媒体流可以通过WebRTC进行传输,并在多个对等端之间共享。将流对象赋值给视频元素的srcObject,实现本地播放音视频

javascript

 function getUserMedia() {
        navigator.mediaDevices.getUserMedia({
            video: {facingMode: facingMode},
            audio: true
        }).then(stream => {
            localStream = stream
            const localVideo = document.getElementById('localVideo');
            localVideo.srcObject = stream;

        });
    }

连接管理

不采用原生webrtc 进行管理连接,原生 API 使用起来较为复杂 ;使用peerJs 组件进行管理连接,PeerJS 在 WebRTC 的基础上提供了更高层次的抽象,使得开发者能够更轻松地构建基于点对点通信的应用程序。

什么是 PeerJS?

PeerJS 是一个基于 WebRTC 技术的 JavaScript 库,用于简化点对点(peer-to-peer)通信的实现。 WebRTC 是一种在浏览器之间实现实时音视频通信的开放标准,但其原生 API 使用起来较为复杂。PeerJS 在 WebRTC 的基础上提供了更高层次的抽象,使得开发者能够更轻松地构建基于点对点通信的应用程序。 PeerJS 提供了以下功能和特性:

  1. 简化的 API:PeerJS 提供了简洁的 API,使得创建和管理对等连接(peer connection)变得更加容易。
  2. 自动信令服务:PeerJS 使用一个信令服务器来协助对等连接的建立。开发者无需自行设置信令服务器,PeerJS 提供了默认的信令服务器供使用。
  3. 可靠的数据通道:PeerJS 提供了可靠的数据通道,使得在对等连接中传输数据变得简单可靠。
  4. 兼容性:PeerJS 支持主流的现代浏览器,并提供了跨平台的支持,包括桌面浏览器和移动浏览器。
javascript
// 创建 Peer 对象
const peer = new Peer('my-peer-id', {
  host: 'peerjs-server.com',
  port: 9000,
  path: '/myapp'
});

// 监听连接建立事件
peer.on('open', id => {
  console.log('Connected with ID:', id);
});

// 建立对等连接
const conn = peer.connect('another-peer-id');

// 监听连接打开事件
conn.on('open', () => {
  conn.send('Hello from peer 1!');
});

// 监听接收到消息事件
conn.on('data', data => {
  console.log('Received:', data);
});

peerjs-server

PeerJS Server 可以被部署在您自己的服务器上,或者使用 PeerJS 提供的公共信令服务器。公共信令服务器是免费提供给开发者使用的,但也可以选择自己托管信令服务器以获得更高的灵活性和控制。 使用 PeerJS Server 的好处包括:

  1. 信令交换:PeerJS Server 用于在对等连接的建立过程中传递信令数据,包括对等连接的元数据、ICE 候选项和 SDP(会话描述协议)等。
  2. 中继服务器:在某些情况下,对等连接的直接建立可能受到网络环境的限制,需要通过中继服务器进行中转。PeerJS Server 可以作为中继服务器,帮助在无法直接连接的情况下建立对等连接。
  3. 认证和安全性:PeerJS Server 可以提供认证和安全性机制,确保只有授权的用户可以进行对等连接,并保护数据的隐私和完整性。

如何使用 PeerJS Server:

  1. 使用 PeerJS 的默认公共信令服务器:PeerJS 提供了一个默认的公共信令服务器,您可以在使用 PeerJS 库时直接使用它。
  2. 使用npm 下载 npm install peer -g ;运行:** **peerjs --port 9000 --key peerjs --path /myapp
  3. 自己部署 PeerJS Server:您也可以下载 PeerJS Server 的源代码,自行部署在自己的服务器上。PeerJS Server 是基于 Node.js 的,您需要安装 Node.js 环境,并按照 PeerJS Server 的文档进行配置和部署。

PeerJS Server 的源代码可以在 PeerJS 的 GitHub 仓库中找到,您可以在那里获取更多关于 PeerJS Server 的详细信息和配置说明。 需要注意的是,如果您选择使用 PeerJS 的默认公共信令服务器,请遵守 PeerJS 的使用政策和条款,并确保适用于您的特定用途。

广域网连接

由于NAT(网络地址转换)和防火墙的存在,直接在两个设备之间建立点对点连接通常是困难的。为了解决这个问题,WebRTC使用了打洞技术,利用中间服务器作为中继来帮助设备建立直接连接,从而实现端到端的实时通信。 打洞服务通过以下步骤来建立直接连接:

  1. 设备A和设备B都向打洞服务发送连接请求。
  2. 打洞服务将设备A和设备B的连接信息(IP地址和端口号)传递给对方。
  3. 设备A和设备B尝试直接连接对方,通过在NAT和防火墙上创建映射,使得两个设备可以直接通信。
  4. 如果直接连接失败,设备A和设备B将尝试使用中继服务器进行通信。

打洞服务通常使用一些技术来实现这种直接连接,例如STUN(会话遍历实用工具)和TURN(中继通信)。STUN用于获取设备的公共IP地址和端口号,TURN用于在直接连接失败时提供中继服务器作为备用通信路径。 打洞服务对于WebRTC中的实时通信至关重要,它使得两个设备可以直接通信,无需经过中间服务器的转发,从而实现更低的延迟和更高的性能。 需要注意的是,打洞服务只是WebRTC连接建立的一部分,实际的通信数据传输仍然是直接的点对点连接。