视频会议开发中的音视频同步
在视频会议开发当中,音频和视频通道一般都是分开传输,而音视频分开传输带来另外一个问题就是音视频必须要同步,如果音视频不同步,就会导致视频会议的真实感急剧下降。因此音视频是否同步也是视频会议真实感的一个衡量标准。
解决视频会议的音视频同步问题就是使用时间戳,所谓的时间戳就是一个时间的参考计数器,我们先选择一个参考时钟,生成数据流时依据参考时钟上的时间给每个数据块都打上时间戳;在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安排播放(如果数据块的开始时间大于当前参考时钟上的时间,则不急于播放该数据块,直到参考时钟达到数据块的开始时间;如果数据块的开始时间小于当前参考时钟上的时间,则“尽快”播放这块数据或者索性将这块数据“丢弃”,以使播放进度追上参考时钟)。
因此,解决音视频同步现象有两个步骤
1. 在生成数据流时要打上正确的时间戳。如果数据块上打的时间戳本身就有问题,那么播放时再怎么调整也于事无补。,视频流内容是从0s开始的,假设10s时有人开始说话,要求配上音频流,那么音频流的起始时间应该是10s,如果时间戳从0s或其它时间开始打,则这个混合的音视频流在时间同步上本身就出了问题。打时间戳时,视频流和音频流都是参考参考时钟的时间,而数据流之间不会发生参考关系;也就是说,视频流和音频流是通过一个中立的第三方(也就是参考时钟)来实现同步的。
2. 在播放时基于时间戳对数据流进行控制,也就是对数据块早到或晚到采取不同的处理方法。参考时钟时间在0-10s内播放视频流内容过程中,即使收到了音频流数据块也不能立即播放它,而必须等到参考时钟的时间达到10s之后才可以,否则就会引起音视频不同步问题。
以上就是视频会议开发当中解决音视频同步问题的方法,具体对于采用的编解码需要用到时间戳代码实现,我们可以参考ffmpeg里面的音视频同步的例子。