一、前言
最近多了个新需求,需要倍速推流,推流界的扛把子obs也有倍速推流功能,最高支持到两倍速。这里所说的倍速,当然只限定在文件,只有文件才可能有倍速功能,因为也只有文件才能倍速解码播放。实时视频流是不可能倍速的,因为没有时长,有时长的才可以按照播放进度来。是否是文件也不能通过是不是本地文件等来判断,以为很多http/rtsp/m3u8等也可能是文件,具体最终的判断依据应该是有没有时长,能不能获取到时长,能获取到的就说明是文件。
倍速推流和倍速播放功能相通,在ffmpeg做音视频解码常识中,有个pts和dts就是用来控制显示时间和解码时间的,如果这两个值除以2就说明时间少了一半,就是2倍速,乘以2就表示时间多了2倍,就是0.5倍速,基本上的运算公式就是 packet.pts = packet.pts/speed,其中这个speed速度参数是float类型。倍速播放的时候其实就是将收到的packet的pts/dts更改后,再送入解码,而推流其实就是保存,保存到rtsp地址就是将数据推流到rtsp,所以将这个值经过同样的运算发出去,就形成了倍速推流。
公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工