前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTSP协议视频结构化平台EasyNVR指定时间段录像时间缺失问题排查

RTSP协议视频结构化平台EasyNVR指定时间段录像时间缺失问题排查

原创
作者头像
TSINGSEE青犀视频
修改2021-04-30 14:21:42
3600
修改2021-04-30 14:21:42
举报
文章被收录于专栏:TSINGSEE青犀视频

EasyNVR具备丰富的二次开发接口,用户可根据需求自由调用和开发。在EasyNVR的实际项目测试中,客户调用了录像回看接口,生成指定时间段录像播放及下载,但是向我们反馈出现录像时间缺失的情况。比如获取0-25S的录像,但是最终生成的录像是从2s开始的,缺少了最开始2s的录像。也就是如下图的情况,需要获取20210408160405到20210408160422之间的录像,但最终生成的录像是从20210408160406分开始的。

查看代码,程序在遍历文件的时候进行了如下判断:

代码语言:javascript
复制
if secFileTime >= start && secFileTime <= end {
   readSecFile = true
}

该判断的内容就是,如果文件的时间大于等于开始时间则读取对应的文件。而因为 hls 流的特性,上一个ts视频的时间为 20210408160402 不符合条件,因此被排除了。但是 20210408160405 正好在该切片中,所以导致总体的数据缺少时间。

我们需要修改代码如下:

代码语言:javascript
复制
// 从名称中获取对应的秒数
secFileTime := strings.Split(secFileName, "-")[1]

readSecFile := false
// 如果第一个文件小于开始时间,则查看下一个文件夹是不是大于文件夹,如果大于
if secFileTime < start {
   // 有下一个数据
   if secFileIndex < secFileLen-1 {
      nextInfo := secFileInfos[secFileIndex+1]
      nextName := strings.Split(nextInfo.Name(), "-")[1]
      if start < nextName {
         readSecFile = true
      }
   }
} else if secFileTime >= start && secFileTime <= end {
   readSecFile = true
}

在每次读取的时候,如果小于开始时间,都同时读取两个文件,判断时间是不是在两个文件中间,如果开始时间在两个文件中间,则也将对应的文件读取,该问题就能得到解决。

但是因为hls流的特性,每个切片的大小是固定的,该种方案会导致获取的时间永远大于等于想获取的时间段。如果想做精确处理,则需要针对 ts 进行再次切片。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
实时音视频
实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档