EasyDSS录像m3u8文件#EXT-X-TARGETDURATION不标准问题的解决

EasyDSS 作为一款支持视频点播的流媒体传输平台,可以自行上传视频文件,也可将上传的点播文件作为虚拟直播进行播放。同时,在视频文件上传方面,我们也增加了新功能,即定时将最新的录像文件上传到文件服务器。之前为大家介绍过该功能的实现,大家有兴趣的话可以翻阅我们以往的博文了解一下。

部分用户反馈 EasyDSS 生成的任意录像在部分浏览器下无法播放,对应的 hls 流如下:

分析 m3u8 文件,发现 #EXT-X-TARGETDURATION 不正确,#EXT-X-TARGETDURATION 代表的是整个 m3u8 文件中最大时长的 TS 文件,部分播放器如果发现该值不是最大的,则会出现播放失败的情况。

针对此问题,我们需要修改代码如下:

fmt.Fprintln(w, "#EXTM3U")

fmt.Fprintln(w, "#EXT-X-VERSION:3")

fmt.Fprintln(w, "#EXT-X-MEDIA-SEQUENCE:0")

fmt.Fprintln(w, fmt.Sprintf("#EXT-X-TARGETDURATION:%s", fmt.Sprintf("%v", int(math.Ceil(timeMax)))))

以前该段代码为:

fmt.Fprintln(w, fmt.Sprintf("#EXT-X-TARGETDURATION:%s", fmt.Sprintf("%v", int(timeMax))))

int 代表让 timeMax 取整,直接向下取整,因此使用 mathCeil(timeMax) 向上取整后可以即符合标准。

原文地址:https://www.cnblogs.com/easydss/p/15407708.html