RTMP与RTSP/RTP:选择哪个用于交互式直播?

22

如果您正在开发交互式直播应用程序,则需要极低(实时)延迟。例如,用于视频会议或远程实验室。

两种适用于此情况的协议是:

  • RTSP,在传输数据时使用RTP
  • RTMP

*WebRTC:因为我想让更多人与彼此互动,所以不适合使用WebRTC。因为据我所知,它并没有设计用于大型受众。

我的问题:

  1. 对于这种用例,应该选择哪个协议? RTSP / RTP还是RTMP?

  2. 哪种协议在端到端延迟、会话启动时间方面提供更好的结果?

  3. 哪种协议消耗更多硬件资源?

  4. RTMP似乎使用持久性TCP连接。但是用于传输的协议是什么?它不能是TCP,因为这不能确保实时延迟?

  5. 一般而言,使用这些协议的优缺点是什么?

我没有在科学论文或书籍中找到有关这两种协议的比较。只知道著名的移动直播应用Periscope使用RTMP。

其他应用程序(如Instagram或Facebook)例如与主播提供基于文本的交互。如果开发人员想要基于交互式直播构建下一个“致命应用程序”,我认为回答这个问题是至关重要的。

1个回答

30

你在回答中做了很多假设。

WebRTC: 我试图让更多的人互相交流,所以 WebRTC 不适合。因为据我了解,它不是为更大的受众群体而设计的。

这并不是真实情况。WebRTC 并不知道也不关心您如何在服务器端构建应用程序。有很多现成的服务可以通过 WebRTC 处理大型组呼叫和低延迟视频分发。

您还应该知道,对于媒体流,WebRTC 在底层使用 RTP。

它不能是 TCP,因为这无法保证实时延迟?

当然可以。TCP 有一些开销,但没有什么阻止您在实时场景中使用它。TCP 的开销非常小。

UDP 传统上用于这些场景,因为不需要可靠性,但这并不意味着 TCP 不能像 UDP 一样高效地使用。

RTMP

RTMP 是 Flash 的死协议。没有浏览器支持它。其他客户端也只支持它出于遗留原因。您不应该将其用于任何新功能。

只有著名的移动直播应用 Periscope 使用 RTMP。

好吧,这不是做任何事情的理由。

  1. 哪种协议提供更好的端到端延迟和会话启动时间?

WebRTC

  1. 哪个协议消耗更多的硬件资源?

这不是正确的问题。几乎任何其他应用程序部分的开销都将比用于分发的协议的传输开销大得多。

您需要考虑的真正事项列表:

  • 客户端兼容性。必须支持什么类型的客户端?
  • 您真的需要低延迟吗?您是否了解这种需求所做出的折衷方案?如果只有少数用户会进行互动,您是否愿意为了这些用户而破坏所有用户的视频质量和可靠性?
  • 您的预算是多少?现成的分发解决方案更便宜。如果您可以将流媒体推送到YouTube上供非互动用户观看,那么您可以节省大量资金。如果不能使用现有基础设施,请准备花费大量资金。
  • 您的实际延迟要求是什么?当在较差的网络和移动设备上无法满足这些延迟要求时,您是否准备减少可使用应用程序的人数?
  • 您有哪些质量要求?
  • 您想在哪里对视频进行多种比特率的转码?
  • 您的观众是否需要自适应比特率观看?
  • 您是否需要同时将流媒体推送到其他平台?
  • 您是否需要记录流媒体以供按需观看或回溯历史?

您可能还会发现我在这里的帖子有所帮助:https://dev59.com/Y1oU5IYBdhLWcg3wcmq8#37475943

简而言之,检查您的假设。了解取舍。基于真实信息做出决策,而不是概括。


谢谢Brad!两点:(1)关于TCP:在视频会议中,传输音频的端到端延迟应该低于400毫秒。当丢失的数据包到达时,它们很可能已经过时,那么TCP在重传丢失的数据包时有何意义?(2)关于WebRTC:WebRTC是一种P2P协议,客户端直接通信,服务器仅用于连接建立。因此,除非我认为你指的是:强大的服务器是通信的一部分,否则它无法扩展到大量观众。 - Joey
4
基于真实信息做出决策,而不是笼统的概括。我在这个问题中寻找真实的信息,比如在相同条件下比较两种协议的基准测试结果。因此,您只需通过绝对数字比较延迟等性能即可。您的回答很详细,但遗憾的是也没有包含“真实信息”。 - Joey
2
WebRTC在严格意义上并不一定是点对点的。服务器可以成为(而且通常就是)其中之一。关于TCP重传,当然它们可能需要一些时间,但首先您需要确定“低延迟”对您意味着什么,以及为了实现它,您愿意做出哪些权衡。几乎从来没有如此重要,以至于您愿意做出巨大的质量和可靠性牺牲。大多数人在几秒钟的延迟平衡中找到了一个平衡点。我试图向您传达的是,您正在问错问题。 - Brad
3
哪个更快:最高时速为120英里的汽车还是最高时速为115英里的汽车?都不是,因为你被困在交通中了。应该坐火车去。当你专注于比较两种不同的协议时,其余的情况才更加重要。我们甚至没有考虑到编解码器及其参数,它们将比您的传输协议更改10倍以上的延迟计算更加重要。选择传输协议应考虑其功能。 - Brad
1
TCP是无损的。因此,重新传输丢失的数据包是没有意义的,因为只要连接保持,就不会丢失数据包。 - Shayne
显示剩余6条评论

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