使用socket.io来传输WebCam

时间:2016-10-17 22:39:49

标签: node.js socket.io stream webrtc webcam

我一直在尝试实现一个能够处理以下场景的Web应用程序:

  • 将视频/音频从客户端流式传输到其他客户端(实际上是一组特定的,没有广播)和服务器。数据源将是客户端的网络摄像头。
  • 此流式数据必须在其他客户端的浏览器上实时显示保存在服务器端以进行“存档”。
  • 必须在node.js + socket.io环境中实现。

把它放在一些更具体的背景中......场景是有一个人为他选择的用户提供了一个空间。在所选用户加入房间后,创建者开始从他/她的内置设备(网络摄像头)流式传输视频/音频。所有客人都实时接收数据,而且数据被发送到存储它的服务器,以便在流和房间关闭后恢复。

我在考虑将Socket.IO与WebRTC混合使用。从理论上讲,这两者的结合似乎非常适合这项工作。 Socket.IO非常适合通过为房间分配一些套接字以及WebRTC要求的信令过程来收集特定的用户集。 同时,WebRTC对于聚集在同一房间内的用户之间的P2P连接非常棒,也很容易访问我可能想要使用的网络摄像头和其他内置设备。

所以是的,理论上一切看起来都不错,但我真的需要看到一些代码在行动,所以我实际上可以尝试自己实现它。而且,我看到了一些问题:

  • 如何保存P2P连接发送的流?显然,服务器无法访问它。我当时认为我可能会将服务器视为另一个“访客”,因此它只是与房间创建者建立P2P连接的另一个端点。但不知何故,它感到前卫。
  • 将服务器视为创建者和客户之间的中间人不是更好吗?在某一点上,与P2P相比可能存在一些(可能是微不足道的)延迟,但可能对所有客户来说都是相同的。 (我试过了,但是我无法从网络摄像头到服务器完成流媒体,但这是一个不同问题的主题,因为我在处理MediaStream时遇到问题)

我一直在寻找一些不错的解决方案但没有任何成功。我已经看到有针对socket.io的这个不错的P2P解决方案:http://socket.io/blog/socket-io-p2p/。问题是 - 我认为它不会很好地处理数据流。这些例子只提到简单的聊天应用程序,我需要比这更重的东西。

我会非常感谢一些具体的例子,文档,可能会让我更接近它的实现,因为我真的不知道如何处理它。

提前致谢:)

2 个答案:

答案 0 :(得分:4)

您可以使用其中一个开源WebRTC服务器解决您的任务。 例如, kurento

您可以实现流的模式:

  • 一对一
  • 一对多
  • 很多很多

WebRtc-server schema

客户端将相互连接抛出webRtc服务器。 因此,在服务器端,您可以录制流,或将其发送到transciding。

webSocket用于与服务器的comunicatind。

您可以根据自己的任务找到一些examples

答案 1 :(得分:2)

向多个用户发送视频流是一个非常难的问题,遗憾的是需要大量的基础设施来实现。您将无法通过websocket流式传输视频数据。 WebRTC对于您所描述的内容也不是一个可行的解决方案,因为正如您所提到的,WebRTC协议是P2P,因为流式用户需要与所有“观看者”直接连接。这显然不会超过一些“观众”。 WebRTC更适用于Skype等直接视频通话。

Here是一篇描述某种流行的直播服务所使用的架构的文章。正如您所看到的那样,以任何规模实现实时视频都需要相当多的资源。