音视频不同步现象
由于视频解码和显示,非常消耗性能,所以视频帧无法和音频帧一样,保证每一帧都能严格准时播放
在现有技术和硬件条件下,任何库都无法百分百保证音视频同步,只能尽力保证误差最小
同步方案
一般的同步方案,都是音频数据正常播放,视频数据匹配音频数据
因为人对视频数据快慢不是很敏感,但是音频数据快慢变化,明显会让人感觉声音变质
视频帧过快时,就延时播放,视频帧过慢时,就不等待帧间隔,加速播放,视频超级慢时,就丢帧
丢帧方案
可以丢弃AVPacket,也可以丢弃AVFrame
丢弃AVFrame的话直接丢即可,丢弃AVPacket的话,则需要额外处理,但是就不用将多余的AVPacket解包为AVFrame了,性能更好
丢弃AVPacket的话,需要将I帧之后的所有B帧和P帧全部丢弃
丢帧示意图
播放器进度控制
既有音频通道,也有视频通道时,应当以音频通道播放进度作为播放器的播放进度
如果两个通道都更新播放器进度,由于进度不一致,会造成进度条抖动现象
没有音频通道时,才以视频进度,作为播放进度