我正在使用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>
1条答案
按热度按时间3npbholx1#
看起来你想做低延迟的HLS,所以你把片段设置为600 ms,这可能会导致问题。
我测试了这个播放器,它不是从第一段开始播放,而是从播放列表中的第三段
livestream-22.ts
开始播放,所以我认为这不是播放器的问题。在配置中,我注意到
hls_fragment
非常小:我想你可能想做低延迟的直播流,但你也应该把编码器的GOP设置为1 s,例如,把OBS的
Keyframe interval
设置为:需要注意的是OBS只支持1 s + gop,所以hls分片也应该设置为1000 ms+,我想问题应该是这个不匹配引起的,所以请修改配置如下,测试一下是否可以:
如果仍然找不到该片段,请显示
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与我们讨论