对回溯不准的改进做法

历史视频回溯不准,多数是在视频录制的时候,出现了分段,并且中间有pts跳变问题导致。

为了解决这个问题,分两步来做:

1.应对视频分段不连续。

通过网关查询,获取各段视频的起止时间。这样在视频帧获取时,可以根据帧间隔时间作为偏移值,以当前段视频起始时间加上帧间隔时间,当和超过当前段结束时间的时候,就跳到下一段。那么当前pts相对值=当前段起始时间+帧间隔累积时间–历史视频初始时间。

2.应对pts跳变不准确。

帧累积时间依赖于前后两帧解码时的pts时间戳值,但是这个时间戳会出现增加到最大阈值边界后跳变回0,以及中间出现的突变。为了保证这个基准可以作为有效偏移,我们增加一个实际时间差作为辅助。从本段视频开始时,记下当前时间A,当出现pts跳变时,记录现在时间B,用时间B-A的差,作为帧间隔累积值。

3。 最终解决方案,是查看历史任务视频分成几段,每段的起止时间添加到一个容器。 然后在提交的任务的时候,只提交一段连续的子时间片段任务,计算出每段视频距离任务起始时间的偏移offset,实际的pts = offset + diff(pts),其中diff(pts) = 解码pts前后两帧的时间差。 这段时间片任务完成后,就会因为收不到流而触发流中断,在那里继续播放下一个连续时间段的子任务,重复上面的操作。 这样可以保证,每次起一个子任务片段的时候,起始位置的pts都是准确的,是一个准确的基准。

你可能感兴趣的:(对回溯不准的改进做法)