HLS直播服务器
HLS live stream server
我打算在 python 中为一个小项目使用 HLS 协议编写自己的直播服务器。
我的想法是使用 Amazon S3 进行存储,让 python 服务器只输出 m3u8 文件。
这一切都很简单,现在问题来了:我想通过不可靠的网络从摄像机流式传输实时视频,如果出现拥塞,播放器可能最终会完成播放 m3u8 中引用的最后一个文件文件。我能否以某种方式将流标记为实时流,让播放器再次尝试在特定时间重新加载 m3u8 以寻找下一段,或者应该如何处理使用 HLS 的实时流?
也许不支持通过 HLS 进行直播?
HLS spec 明确允许将其作为“实时播放列表”。您需要注意一些事项,但值得注意的是,来自第 6.2.1 节:
The server MUST NOT change the Media Playlist file, except to:
o Append lines to it (Section 6.2.1).
如果我们看一下第 4.3.3.4 节:
The EXT-X-ENDLIST tag indicates that no more Media Segments will be added to the Media Playlist file. It MAY occur anywhere in the Media Playlist file.
换句话说,如果播放列表 不 包含 #EXT-X-ENDLIST
标签,则预计播放器将继续从最初加载它的任何来源加载播放列表从某种频率开始,寻找服务器将片段附加到播放列表。
大多数播放器会考虑当前的网络状况来执行此操作,以便他们有机会在播放赶上之前获得新的片段。如果服务器需要中断段,或以其他方式引入间隙,则它有责任引入 #EXT-X-DISCONTINUITY-SEQUENCE
标记。
Apple 在其开发者网站上提供了更具体的 example of a Live Playlist。
我打算在 python 中为一个小项目使用 HLS 协议编写自己的直播服务器。
我的想法是使用 Amazon S3 进行存储,让 python 服务器只输出 m3u8 文件。
这一切都很简单,现在问题来了:我想通过不可靠的网络从摄像机流式传输实时视频,如果出现拥塞,播放器可能最终会完成播放 m3u8 中引用的最后一个文件文件。我能否以某种方式将流标记为实时流,让播放器再次尝试在特定时间重新加载 m3u8 以寻找下一段,或者应该如何处理使用 HLS 的实时流? 也许不支持通过 HLS 进行直播?
HLS spec 明确允许将其作为“实时播放列表”。您需要注意一些事项,但值得注意的是,来自第 6.2.1 节:
The server MUST NOT change the Media Playlist file, except to:
o Append lines to it (Section 6.2.1).
如果我们看一下第 4.3.3.4 节:
The EXT-X-ENDLIST tag indicates that no more Media Segments will be added to the Media Playlist file. It MAY occur anywhere in the Media Playlist file.
换句话说,如果播放列表 不 包含 #EXT-X-ENDLIST
标签,则预计播放器将继续从最初加载它的任何来源加载播放列表从某种频率开始,寻找服务器将片段附加到播放列表。
大多数播放器会考虑当前的网络状况来执行此操作,以便他们有机会在播放赶上之前获得新的片段。如果服务器需要中断段,或以其他方式引入间隙,则它有责任引入 #EXT-X-DISCONTINUITY-SEQUENCE
标记。
Apple 在其开发者网站上提供了更具体的 example of a Live Playlist。