我想做的是创建一个简单的虚拟教室项目,如 Adobe connect,但显然更简单,使用
Flutter
和 NodeJS
,我需要以下选项:
到目前为止,我搜索发现它似乎
WebRTC
适用于视频/语音流以及屏幕共享。
大多数实时聊天项目都使用
Socket.IO
。
我的主要问题是知道我可以只使用
WebRTC
来进行实时视频/语音流和实时聊天吗?这是一个好主意还是将 Socket.IO
和 WebRTC
结合在一起更好?
此外,我想知道我可以将这些库用于文件共享吗?
WebRTC 为您提供更低的延迟和大量开箱即用的会议功能。因此,对于视频/音频通话和屏幕共享来说,这绝对是更好的选择。
此外,还可以选择使用 p2p 通信,这可以进一步减少延迟并节省服务器端的资源。不过,如果您打算支持许多参与者,那么它看起来不太有利 - 如果您总共有
n-1
用户,您将需要为每个用户维护 n
连接。
对于实时聊天、白板和文件共享,性能方面不会有太大差异。 需要考虑的事项:
我可以仅使用 WebRTC 进行实时视频/语音流传输吗? 也可以实时聊天
是的,可以,有一个 RTCDataChannel 接口用于交换任意数据。它可以用于实时聊天/白板/文件传输。
作为一个很好的例子,有一个开源项目peercalls,它通过用于会议的同一连接通过 WebRTC 实现聊天和文件传输。
Websockets 也可用于文件传输,请查看此库。
使用WebRTC需要信令服务器,信令通常使用websocket实现,请查看这篇mdn文章信令和视频通话
通过 websocket,你也可以实现实时聊天,所以这不是一个非此即彼的情况,而是两者经常发生。
对于使用 WebRTC 的实时视频流,您需要以下元素:
正如您在本例中看到的,您可以使用 Socket.io 但仅适用于 Emit Signals 和 ICECandidate。