nginx 使用Clapprjs在网页上流式传输.m3u8

hmmo2u0o  于 2023-02-18  发布在  Nginx
关注(0)|答案(1)|浏览(198)

我正在使用nginx-rtmp来转换rtmp到hls和流在一个网页与Clappr。但Clappr采取旧的.ts段(导致404错误,因为它是在服务器上删除)。如何解决这个问题?
抱歉,这是我第一次使用nginx-rtmp和流媒体
Nginx-rtmp配置:

rtmp {
        server {
                listen 1935; # Listen on standard RTMP port
                chunk_size 4000;
                buflen 1s;
                application show {
                        live on;
                        record off;
                        # Turn on HLS
                        hls on;
                        hls_path /nginx/hls/;
                        hls_fragment 600ms;
                        hls_playlist_length 5s;
                        # disable consuming the stream from nginx as rtmp
                        deny play all;
                }
        }
}

要在Web上流式传输的代码

<!DOCTYPE html>
<html>

<head>
  <meta charset=utf-8 />
  <title>videojs-contrib-hls embed</title>

  <link href="video-js.css" rel="stylesheet">
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/clappr@latest/dist/clappr.min.js">
  </script>
</head>

<body>

  <div id="player"></div>

  <script>
    var player = new Clappr.Player({ 
    source: "<my url>", 
    parentId: "#player",
    });
  </script>

</body>

</html>

Clappr read old .ts segment
On server, this segment deleted

3npbholx

3npbholx1#

看起来你想做低延迟的HLS,所以你把片段设置为600 ms,这可能会导致问题。
我测试了这个播放器,它不是从第一段开始播放,而是从播放列表中的第三段livestream-22.ts开始播放,所以我认为这不是播放器的问题。

在配置中,我注意到hls_fragment非常小:

hls_fragment 600ms;
hls_playlist_length 5s;

我想你可能想做低延迟的直播流,但你也应该把编码器的GOP设置为1 s,例如,把OBS的Keyframe interval设置为:

需要注意的是OBS只支持1 s + gop,所以hls分片也应该设置为1000 ms+,我想问题应该是这个不匹配引起的,所以请修改配置如下,测试一下是否可以:

hls_fragment 1000ms;
hls_playlist_length 5s;

如果仍然找不到该片段,请显示live.m3u8内容。
顺便说一句,你想做低延迟的直播吗?请注意,你不能只设置服务器上的ts片段(hls_fragment)的持续时间,你还应该设置OBS的Keyframe interval或gop。
如果你使用自己的服务器来devlier直播流,你可以使用HTTP-FLV or HTTP-TS,它也工作得很好,类似于HLS。
当通过CDN传送HLS时,CDN不支持HTTP-FLV或HTTP-TS,所以您应该尝试其他播放器,从最后一段开始播放,因为延迟是由HLS的播放器行为决定的。
欢迎通过discord与我们讨论

相关问题