直播行业因为近期疫情的原因,进入了一波小风口,我们都知道 pts 和 dts 对于音视频来说是一个什么样的概念,视频如果没有时间戳,出来的是一张张图片,推流的时间戳要怎么处理比较好呢,本章主要梳理一下在直播推流场景中,针对底层封装数据内部的时间戳 pts 和 dts 的相关处理,以及部分需要注意的地方。
直播目前 pts 和 dts 个人已知的设置模式有以下几种:
1. 从 0 开始计算:从 0 开始计算,即只要开始推流,pts 和 dts 均是从 0 开始,不管后续同一个流是否在推,均从当前 start 开始计时,每次 stop 时结束计时。
2. 针对基础时间计算:类似针对当前推流对象的创建,记录一个 base time, 从当前 start 开始推流时,根据生成的 base time 生成对应的时间偏移量赋给 pts 和 dts。
3. 取绝对时间的某些值计算:直接设置 pts 和 dts 一个固定时间的某些值,然后后续推流时取当前固定时间的偏移量,不过要考虑数值溢出的情况。
上述三种方法,在直播场景中,各家有各家的选择。不过一般如果有直播需求的,大部分都会有落存储,看回放的业务需求,上述三种方法对于回放的影响就比较大了,如果需要生成对应时间段中直播的回放,但是实际上是由两段直播合并而成的话,就会出现 dts 跳变的问题,导致播放回放时影响体验