从客户端到服务器的视频流:哪种替代用途,websocket或webrtc

时间:2014-01-18 19:16:50

标签: stream websocket video-streaming webrtc

我希望做几个小项目,试验从​​客户端到服务器以及客户端 - 服务器 - 多个点的视频和音频流,我有几个问题:

1)我知道并不是从点到点避免服务器中间使用webrtc的硬流,但是可以使用webrtc将客户端流到服务器(通过websocket存在一些好处,或者webrtc中的好处是避免中间通信) ......流视频和音频怎么样?

使用websocket流式传输视频或音频非常简单,但我找不到任何使用webrtc流式传输客户端服务器的经验。

2)关于将视频流式传输到倍数点,我知道最近有一些关于webrtc的实验,因为最初这是不可能的,现在:当它用于1到多点时,webrtc性能会降低吗?...将流式传输到服务器(可能使用webrtc)然后使用websockets流式传输到几个点会更好。

非常感谢,请不要粗鲁,我的问题不是主观或比较两种技术,更关心知道哪些是限制,我在哪里可以使用每一个...谢谢!。

5 个答案:

答案 0 :(得分:3)

Peer2Peer?

可以使用WebRTC完成,而不是使用WebSockets。见Do websockets allow for p2p (browser to browser) communication?

浏览器支持?

WebRTC:Chrome + Firefox(+ Opera)

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

运输?

WebRTC:UDP(SRTP),(也可能:带有TURN服务器的TCP模式)希望始终端到端加密,但I'm not sure in case of TURN servers

WebSockets:TCP,可以通过HTTPS / WSS保护,但不能在同行之间端到端保护!

答案 1 :(得分:2)

是的,可能......

尝试将KURENTO与WEBRTC一起使用。

你可以找到一对多的'在他们的文档中调用应用程序,从客户端到服务器和服务器到许多客户端。

答案 2 :(得分:0)

WebRTC适用于浏览器。你说得对:

  

或webrtc的好处是避免中间沟通

特别针对浏览器。您可以建立与服务器的连接,但它必须具有UI(带GUI的ubuntu服务器),并安装浏览器(但这不是我想要的)。除此之外,没有其他方法可以流式传输到服务器而不是websockets。

根据另一个答案,可以流入和流出启用RTC的服务器

关于多个流,这很难。我answered a question关于将webrtc用作多个点对点。也许这就是你能做的,但是需要一个好的代码来管理谁应该连接谁,只是链接你的用户。在这种情况下,服务器是最好的(如果你想使用浏览器兼容性,websockets比webRTC,even IE supports them now(?!?!)更受支持。

您可能需要一个结论:

  • 减少服务器负载,点对点:webRTC
  • 多人连接等:带有中间服务器的WebSockets。

请注意,webRTC需要进行一些数据交换才能启动。您可以使用node.js中的websocket服务器轻松完成此操作。

希望这会对您的开发过程有所帮助,我希望您能听到您将使用哪种解决方案!

答案 3 :(得分:0)

我不同意MarijnS95,因为我认为WebRTC不是专为浏览器而设计的。您可以在任何平台以及浏览器之外的任何服务器或客户端应用程序中使用它。那是好事。

WebRTC只是一组已存在的协议,捆绑在一起提供实时通信。它被称为网络,因为谷歌想要使用浏览器使其广泛使用(这是传播这个词的重要一步)......

所以,回答你的问题:WebRTC优于WebSockets流媒体内容,原因很明显。

  • 创建WebSockets以建立与服务器的TCP连接,以便您可以进行双向连接。
  • WebRTC建立与任何其他对等方(不仅是服务器)的连接,最重要的是,它使用SRTP(安全实时协议)来传输媒体内容。如名称所示,创建协议以传输实时信息,并且优选地通过UDP传输。另外,网络上的许多点都将RTP视为特权协议。

因此,优势显而易见,但是,您也可以使用WebSockets来传输数据。

  

我找不到任何关于使用webrtc流式传输客户端服务器的经验。

嗯,WebRTC使用标准协议,您可以使用标准服务器来支持它。对Asterisk + WebRTC进行一些搜索。

关于多点问题,答案是一样的。使用WebRTC(无论是否转到服务器)都可以获得更好的结果。正如您所说,对等会议的问题是已知的,并且解决方案确实是使用服务器将每个客户端的流数量减少到一个。在理想的世界中,您将使用MCU来完成这项工作。这就是它的完成方式。

答案 4 :(得分:0)

我不知道这个问题是否仍然需要一个明确的答案,但我想做类似的事情。

我个人将Node.js与Node.js的以下插件结合使用,以在服务器端启用WebRTC:node-webrtc。它目前仅支持Linux和Mac OSX,但它允许我快速设置WebRTC服务器。然后,您可以使用服务器将流分发给其他对等方,使用WebSockets,WebRTC或其他方式进行连接。

源代码也可从WebRTC网页免费获得。因此,您可以自己构建一个本机应用程序,如果您愿意,可以充当服务器。