客户端向服务器进行视频流传输:WebSocket与WebRTC哪个更好?

6
我希望能做几个小项目,尝试从客户端到服务器以及从客户端-服务器-多个点进行视频和音频流测试。我有几个问题:
1)我知道使用webrtc避免中间服务器从点到点进行流传输并不难,但是使用webrtc可以将客户端流传输到服务器吗?(在websocket上存在某些优势,或者webrtc的好处是避免中间通信)...那么视频和音频流呢?
使用websocket进行视频或音频流非常简单,但我找不到任何有关使用webrtc进行客户端-服务器流传输的经验。
2)多点视频流传输怎么样?我知道最近有一些使用webrtc的实验,因为最初这是不可能的。现在:当用于1对多点时,webrtc性能会下降吗?...是否更好的想法是将视频流传输到服务器(也许使用webrtc),然后使用websocket将其传输到多个点?
非常感谢,请不要粗鲁,我的问题不是主观的或比较两种技术,而是更多地涉及了解各自的限制和在哪里可以使用它们...谢谢!
5个回答

3
我不知道是否仍需要对这个问题给出明确的答案,但我想做类似的事情。
我个人使用了Node.js与下面的插件相结合,以在服务器端启用WebRTC:node-webrtc。目前只支持Linux和Mac OSX,但它使我能够快速设置WebRTC服务器。然后,您可以使用服务器将流分发给其他同行,无论是使用WebSockets、WebRTC还是其他方式连接。
源代码也可以从WebRTC网页免费获取。因此,如果您想要构建一个充当服务器的本地应用程序,那么您可以自己构建。

3

点对点通信?

可以使用WebRTC实现,但不能使用WebSockets。请参见WebSockets允许浏览器之间进行P2P(浏览器到浏览器)通信吗?

浏览器支持?

WebRTC: Chrome + Firefox (+ Opera)

WebSockets: Chrome + Firefox + IE + Safari (+ Opera和一些其他浏览器)

传输方式?

WebRTC: UDP(SRTP),(也可能通过TURN服务器使用TCP模式),希望始终端到端加密,但在使用TURN服务器的情况下我不确定

WebSockets: TCP,可以通过HTTPS / WSS进行安全保护,但不能在对等方之间进行端到端加密!


3
我不同意MarijnS95的观点,因为我认为WebRTC并不是专门为浏览器设计的。你可以在任何平台上使用它,在任何服务器或客户端应用程序中使用它,而不仅仅局限于浏览器。这是好的一面。
WebRTC只是一组已经存在的协议,打包提供实时通信。它被称为Web,是因为Google希望通过浏览器使其可用和普及(这是传播消息的重要步骤)...
所以,回答你的问题:WebRTC比WebSockets更适合流媒体内容,理由很明显。
- WebSockets是为了建立与服务器的TCP连接,以便您可以建立双向连接。 - WebRTC建立到任何其他对等方(不仅仅是服务器)的连接,并且最重要的是,它使用SRTP(安全实时传输协议)来传输媒体内容。正如名称显示的那样,该协议是为了传输实时信息,并且最好使用UDP。作为额外的功能,网络上的许多点将RTP视为特权协议。
因此,优点是显而易见的,但是是的,您也可以使用WebSockets来流式传输数据。
“我找不到任何关于使用webrtc进行流式客户端-服务器的经验。”
嗯,WebRTC使用标准协议,您可以使用标准服务器来支持它。搜索一下Asterisk + WebRTC。
关于多点问题,答案是相同的。使用WebRTC(无论是去服务器还是不去)可以获得更好的结果。对等会议的问题是众所周知的,正如您所说的那样,解决方法确实是使用服务器将流的数量减少到每个客户端一个。在理想的世界中,您将使用MCU来完成此任务。就是这样做的。

1
看到你的回答:我说的是WebRTC,而不是RTC本身。确实可以将WebRTC连接到启用了RTC的服务器。 - MarijnS95

2

是的,这是可能的...

尝试使用KURENTO和WEBRTC。您可以在他们的文档中找到“一对多”呼叫应用程序,从客户端到服务器和服务器到多个客户端。


0

WebRTC是为浏览器而设计的。你说得对:

或者webrtc的好处是避免中间通信

它特别为浏览器而设计。您可以连接到服务器,但然后必须有一个UI(带GUI的Ubuntu服务器),并安装浏览器(但我猜这不是您想要的)。除此之外,没有其他方法可以流式传输到您的服务器,只能使用websockets。

根据另一个答案,可以将流式传输到和从启用RTC的服务器。

关于多个流,这有点困难。我回答了一个问题,关于使用webrtc作为多个点对点。也许这就是您可以做的,但需要良好的代码管理谁应该连接到谁,并仅链接您的用户。在这种情况下,服务器是最好的选择(如果您想使用浏览器兼容性,则websockets比webRTC更受支持,甚至IE现在也支持它们(?!?)。

您可能需要一个结论:

  • 减少服务器负载:使用WebRTC进行点对点通信。
  • 多人连接等情况:使用带有中间服务器的WebSockets。

请注意,WebRTC需要一些数据交换才能开始。您可以在node.js中轻松使用websocket服务器完成此操作。

希望这能帮助您进一步开发,期待听到您将使用哪种解决方案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接