【问题标题】:How to switch streams in live streaming for fault tolerance如何在直播中切换流以实现容错
【发布时间】:2022-01-10 10:03:41
【问题描述】:

在网络条件较弱的户外直播时,有一些设备可以聚合网络,例如 MPTCP 路由器。但是MPTCP丢包,会导致直播问题,比如流中断。

因此,如果将多个直播流发布到服务器,它比单个流更强大。我的问题是:如果某些流有问题,如何在流之间切换,而不需要重新连接播放器?

例如发布两个流:

  • streamArtmp://xxx/app/streamA
  • streamBrtmp://xxx/app/streamB

播放流,无论选择哪个流:

  • streamrtmp://xxx/app/stream

如果streamA质量差或中断,管理员可以切换到streamB,播放器仍然播放流而不重新连接。

另外,播放端无需刷新,流不会中断,视频内容不会重复或跳帧。

【问题讨论】:

    标签: media rtmp live-streaming simple-realtime-server


    【解决方案1】:

    为了支持多流容错,有一些解决方案:

    1. 服务器解决方案:发布同名流,只播放一个流。
    2. 服务器解决方案:发布不同名称的流,只播放一个流。
    3. 客户端解决方案:发布不同名称的流,播放流列表。

    客户端解决方案

    这是最简单的解决方案,例如,假设发布两个流:

    • streamArtmp://xxx/app/streamA
    • streamBrtmp://xxx/app/streamB

    播放器从您的后端服务器获取播放列表:

    • streamArtmp://xxx/app/streamA
    • streamBrtmp://xxx/app/streamB

    如果serverA 不可用,用户将切换到streamB。强烈推荐这个解决方案,因为它简单而健壮,并且不需要对流媒体系统进行任何更改。

    注意:播放器也可以播放 HTTP-FLV/HLS 或 WebRTC,请阅读this post

    服务器解决方案:多个 URL

    如果发布多个流,每个流都有其 URL,如下所示:

    • streamArtmp://xxx/app/streamA
    • streamBrtmp://xxx/app/streamB

    媒体服务器会将merge这些网址转为一个网址,在流不可用时自动切换,让播放器始终使用一个网址播放流:

    • streamrtmp://xxx/app/stream

    注意:播放器也可以播放 HTTP-FLV/HLS 或 WebRTC,请阅读this post

    对于SRS,这个功能被命名为Alias for Stream,目前不支持(2022.01),但是有一个解决方法,使用FFmpeg将streamA转换为stream

    ffmpeg -f flv rtmp://xxx/app/streamA -c copy -f flv rtmp://xxx/app/stream
    

    如果streamA不可用,管理员应该在杀死之前的FFmpeg进程后,通过启动一个新的FFmpeg cli切换到streamB

    killall -9 ffmpeg
    ffmpeg -f flv rtmp://xxx/app/streamB -c copy -f flv rtmp://xxx/app/stream
    

    这个解决方案很简单,不需要对流媒体系统和播放器做任何事情,它应该可以完美运行。

    服务器解决方案:一个 URL

    如果使用相同的 URL 发布多个流:

    • streamArtmp://xxx/app/stream
    • streamBrtmp://xxx/app/stream

    需要媒体服务器或集群支持此功能。 SRS 没有这方面的计划,因为它比以前的解决方案不够简单。

    不过,部分视频云平台已经支持此功能,如Tencent Cloud Streaming Services

    其他问题

    如果在流之间切换,总会出现一些问题,例如内容重复或滞后。想想第一个解决方案,播放器播放一个播放列表有两个流,如果切换到另一个,不可能播放相同的时间戳,因为它是实时流。

    您可以尝试 HLS,在流之间切换,并从另一个流的下一个 ts 文件播放,但我不确定它是否有效。

    我认为当流切换时,这意味着网络故障或设备损坏等一些大问题,除非流不可用,否则似乎没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2019-12-10
      • 2021-06-30
      • 2021-01-31
      相关资源
      最近更新 更多