You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python+HLS协议搭建直播服务器,弱网场景下HLS播放问题如何解决?

HLS直播流断流续播问题解决方案

核心结论

HLS原生支持直播场景,你遇到的播放器播完分片就停止的问题,是m3u8文件的标签配置不符合直播规范导致的。

直播流标记方法

只需要在你输出的m3u8文件中移除#EXT-X-ENDLIST标签即可。

  • 点播场景下的m3u8会在文件末尾追加#EXT-X-ENDLIST,标记所有分片已经全部加载完成
  • 直播场景下只要不添加该标签,所有兼容HLS规范的播放器都会自动识别为直播流,会按照默认规则定时重新请求m3u8文件拉取新增分片

不稳定网络场景适配方案

针对摄像头推流网络不稳定的场景,可以通过以下配置优化播放体验:

  • 调整分片时长:建议设置为2~4s,兼顾直播延迟和抗网络波动能力,网络较差的场景可以降到2s,降低单次分片加载失败的影响
  • 配置刷新规则:m3u8的刷新间隔建议设置成分片时长的1/2,比如2s分片对应1s刷新间隔,避免播放器本地缓存耗尽后还未拿到新的分片列表
  • 追加序号标记:在m3u8头部添加#EXT-X-MEDIA-SEQUENCE标签,标记当前分片列表的起始序号,播放器每次刷新m3u8时会自动比对序号,跳过已经加载过的分片,避免重复加载浪费带宽
  • 增加断流容忍窗口:当推流端因为网络拥塞暂时断流时,服务端不要立即给m3u8追加#EXT-X-ENDLIST标签,保留10~30s的重试窗口,只要该窗口内推流恢复、新的ts分片上传到S3,你就可以把新分片的地址追加到m3u8中,播放器会自动续播,不会中断

S3存储适配注意事项

你的架构用S3存ts分片的方案是可行的,只需要做两个小调整:

  • ts文件设置较长的缓存时间,比如7天,降低回源成本
  • m3u8文件关闭缓存,Python服务端返回m3u8的时候响应头添加Cache-Control: no-cache, no-store, must-revalidate,确保播放器每次请求都能拿到最新的分片列表

内容的提问来源于stack exchange,提问作者www.jensolsson.se

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:57:02