如果我除了实时视频流之外还想要实时聊天功能,我应该将 webRTC 与 Socket.IO 一起使用吗?

问题描述 投票:0回答:3

我想做的是创建一个简单的虚拟教室项目,如 Adobe connect,但显然更简单,使用

Flutter
NodeJS
,我需要以下选项:

  1. 实时视频或仅语音流
  2. 实时聊天框
  3. 屏幕共享能力
  4. 文件共享能力(如PDF或PowerPoint或其他文本/文档文件)
  5. 白板

到目前为止,我搜索发现它似乎

WebRTC
适用于视频/语音流以及屏幕共享。

大多数实时聊天项目都使用

Socket.IO

我的主要问题是知道我可以只使用

WebRTC
来进行实时视频/语音流和实时聊天吗?这是一个好主意还是将
Socket.IO
WebRTC
结合在一起更好?

此外,我想知道我可以将这些库用于文件共享吗?

node.js flutter socket.io webrtc video-streaming
3个回答
6
投票

WebRTC 为您提供更低的延迟和大量开箱即用的会议功能。因此,对于视频/音频通话和屏幕共享来说,这绝对是更好的选择。

此外,还可以选择使用 p2p 通信,这可以进一步减少延迟并节省服务器端的资源。不过,如果您打算支持许多参与者,那么它看起来不太有利 - 如果您总共有

n-1
用户,您将需要为每个用户维护
n
连接。

对于实时聊天、白板和文件共享,性能方面不会有太大差异。 需要考虑的事项:

  • WebRTC 的设置和支持比 Websocket 更复杂
  • 可能有针对此功能的开源解决方案,我会根据您可以在项目中重用的内容做出决定
  • 您可以使用 WebRTC 来实现某些功能,使用 Websocket 来实现其他功能

我可以仅使用 WebRTC 进行实时视频/语音流传输吗? 也可以实时聊天

是的,可以,有一个 RTCDataChannel 接口用于交换任意数据。它可以用于实时聊天/白板/文件传输。

作为一个很好的例子,有一个开源项目peercalls,它通过用于会议的同一连接通过 WebRTC 实现聊天和文件传输。

Websockets 也可用于文件传输,请查看此库


1
投票

使用WebRTC需要信令服务器,信令通常使用websocket实现,请查看这篇mdn文章信令和视频通话

通过 websocket,你也可以实现实时聊天,所以这不是一个非此即彼的情况,而是两者经常发生。


0
投票

对于使用 WebRTC 的实时视频流,您需要以下元素:

  • 发出视频/语音信号(使用STUN/TURN服务器例如:coturn)
  • 发出信号(使用 websockets,例如:Socket.io、推送器等)
  • 发出 ICECandidate(使用 websockets,例如:Socket.io、推送器等)

正如您在本例中看到的,您可以使用 Socket.io 但仅适用于 Emit Signals 和 ICECandidate。

© www.soinside.com 2019 - 2024. All rights reserved.