首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保在原始群集模式下访问右后端M3U8文件

如何确保在原始群集模式下访问右后端M3U8文件
EN

Stack Overflow用户
提问于 2021-12-18 16:10:05
回答 1查看 236关注 0票数 2

从SRS如何转换HLS 维基,我们知道SRS在hls_path中生成相应的M3U8播放列表,下面是我的配置文件:

代码语言:javascript
复制
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        /data/hls-records;
        hls_fragment    10;
        hls_window      60;
    }
}

在一种SRS服务器情况下,每个客户端都会播放HLS流访问同一个push SRS服务器,这是可以的。但是在原始集群模式下,有很多SRS服务器,每个流都在其中之一。当客户端播放此HLS流时,我们无法保护它访问正确的源SRS服务器(如果不存在则导致404 http状态代码)。与RTMP和HTTP流不同,SRS使用HTTP特性来重定向正确的源SRS。

为了解决这一问题,我认为以下两种解决办法:

  • 使用专用后端HLS段SRS服务器: 不要生成原始SRS服务器中的M3U8,每个流都转发到这个SRS服务器,所有的M3U8都是在这个服务器中生成的,所有的M3U8请求都是这个服务器的代理(使用nginx)。坏处。该解决方案仅限于一个实例,没有扩展能力和单节点风险。

原始srs.conf转发配置如下:

代码语言:javascript
复制
vhost same.vhost.forward.srs.com {
    # forward stream to other servers.
    forward {

        enabled on;

        destination 192.168.1.120:1935;
    }
}

其中,192.168.1.120是后端hls段SRS服务器。

  • 使用云存储,如NFS/K8S PV/分布式文件系统: 在每个SRS服务器中,将云存储作为本地文件夹挂载,无论SRS服务器、M3U8文件和ts段在哪个流中传输到同一个大存储,所以在HLS请求后,http服务器将它们作为静态文件。从我的测试,如果云存储写速度是可靠的,它是一个很好的解决方案。但是,如果网络抖动或写入速度不及接收到的速度,则会阻塞其他协同工作,从而导致SRS异常。

hls_path配置如下:

代码语言:javascript
复制
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        /shared_storage/hls-records;
        hls_fragment    10;
        hls_window      60;
    }
}

这里'shared_stoarge‘是指nfs/cephfs/pv挂载点。

以上的解决方案在我看来并没有从根本上解决准入问题,我期待着为这种情况找到更可靠的产品解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-20 00:33:02

当您使用OriginCluster时,您必须获得大量要服务的流,有许多编码器可以将流发布到媒体服务器。解决问题的关键是:

  1. 不要使用单一的服务器,使用集群的弹性能力,因为您可能会得到更多的流在未来。因此,向前是不好的,因为您必须配置一组特殊的流,类似于手动哈希算法。
  2. 除了带宽,磁盘IO也是瓶颈。您肯定需要一个高性能的网络存储集群。但是要小心,不要让SRS直接写到存储器中,这样会阻塞SRS的协同工作。

因此,据我所知,最好的解决办法是:

  1. 使用SRS源集群,在本地磁盘上写入HLS或RAM磁盘更好,以确保磁盘IO不会阻塞SRS协同线(由状态线程网络IO驱动)。
  2. 使用网络存储集群来存储HLS文件,例如像AWS S3或NFS/K8SPV/Distributed之类的云存储。使用nginx或CDN提供HLS。

现在的问题是:如何将数据从内存/磁盘移动到网络存储集群?

您必须通过Python或Go构建一个服务:

  • 使用on_hls回调,通知您的服务移动HLS文件。
  • 使用on_publish回调,通知您的服务启动FFmpeg以将RTMP转换为HLS。

请注意,FFmpeg应该从SRS边缘提取流,而不是直接从原始服务器提取流。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70405004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档