使用过TSINGSEE青犀视频产品的用户都知道,我们全线产品都是支持录像的,其中EasyDSS内的虚拟直播也可以通过推入直播间的方式设置录像(EasyDSS如何将虚拟直播进行录像)。
当某位用户需要截取某天的某一段时间的录像,就需要手动输入时间和调用接口去获得录像。但是发现下载下来的录像及时间和需要截取的时间段有较大的偏差。
这个问题其实是ts视频文件和时间不匹配导致的,我们的处理方法是将包含这一段录像时间的ts文件通过ffmpeg合成MP4文件,再对这个MP4文件进行截取,截取想要的时间段。
修改代码如下,供参考:
//截取视频
func intercept(starttime string, endtime string, mp4PathTmp string, mp4Path string, m3u8TS []string) {
if len(m3u8TS) == 0 {
return
}
_, fileName := filepath.Split(m3u8TS[0])
zeroStart := etime.StrYYYYMMDDHHmmssToTime(strings.Split(fileName, "-")[1]).Unix()
start := etime.StrYYYYMMDDHHmmssToTime(starttime).Unix()
end := etime.StrYYYYMMDDHHmmssToTime(endtime).Unix()
//获取起始时间
originStr := getOrigin(zeroStart, start)
length := end - start
lengthStr := strconv.Itoa(int(length))
var params []string
params = append(params, "-ss", originStr)
params = append(params, "-t", lengthStr)
params = append(params, "-accurate_seek", "-i", mp4PathTmp)
params = append(params, "-codec", "copy", mp4Path)
cmd := exec.Command(EasyTrans(), params...)
cmd.Start()
cmd.Wait()
}
以前我们分享过EasyDSS直播视频平台如何设置ts切片大小,大家可以简单了解一下。EasyDSS支持Flash、HTML5播放,兼容Windows、Android、iOS、Mac等操作系统,转码、上传一体化设计,使音视频资源转码后可立即面向互联网进行发布。