HLS 直播服务器

Posted

技术标签:

【中文标题】HLS 直播服务器【英文标题】:HLS live stream server 【发布时间】:2021-10-24 03:05:33 【问题描述】:

我打算为一个小项目使用 HLS 协议在 python 中编写自己的直播服务器。

我的想法是使用 Amazon S3 进行存储,让 python 服务器只输出 m3u8 文件。

这很简单,现在解决问题:我想通过不可靠的网络从摄像机流式传输实时视频,如果出现拥塞,播放器最终可能会完成 m3u8 文件中引用的最后一个文件的播放。我可以以某种方式将流标记为实时流,让播放器在特定时间再次尝试重新加载 m3u8 以寻找下一个片段,或者应该如何处理使用 HLS 的实时流? 也许不支持通过 HLS 进行直播?

【问题讨论】:

没有EXT-X-ENDLIST 标签的清单应该由播放器以一定频率重新加载,以在正在进行的流中寻找新的片段。大多数玩家都会有足够的时间来解决一些网络问题。 @AnonCoward 听起来很棒,如果您愿意将此作为答案,我会将其标记为已接受 【参考方案1】:

HLS spec 明确允许将其作为“实时播放列表”。您需要注意一些事项,但值得注意的是,从第 6.2.1 节开始:

服务器不得更改媒体播放列表文件,除非:

o 向其添加行(第 6.2.1 节)。

如果我们看一下第 4.3.3.4 节:

EXT-X-ENDLIST 标记表示不再将媒体段添加到媒体播放列表文件中。它可能出现在媒体播放列表文件中的任何位置。

换句话说,如果播放列表包含#EXT-X-ENDLIST标签,则预计播放器将继续以某种频率从最初加载它的任何来源加载播放列表,寻找服务器将片段附加到播放列表。

大多数播放器会在考虑当前网络状况的情况下执行此操作,以便他们有机会在播放赶上之前获得新的片段。如果服务器需要中断段,或者引入间隙,它有责任引入#EXT-X-DISCONTINUITY-SEQUENCE标签。

Apple 在其开发者网站上提供了更具体的example of a Live Playlist。

【讨论】:

另外,我喜欢第 6.2.1 节中的文本有一个引用第 6.2.1 节的脚注。

以上是关于HLS 直播服务器的主要内容,如果未能解决你的问题,请参考以下文章

基于HTTP的直播点播HLS

直播服务器简单实现 http_flv和hls 内网直播桌面

基于Nginx搭建RTMP-HLS视频直播服务器

转: 基于nginx的hls直播系统

直播 - HLS + RTSP 使用 Video.js (Wowza 服务器)

使用Nginx+FFMPEG搭建HLS直播转码服务器