在理解上一个教程的基础上,这篇教程就稍微容易理解些了,不外乎多加了两种同步方式,同步音频到视频,同步音频视频到外部时钟。
这篇教程主要是新增了不少新变量,is->video_current_pts用于保存当前视频帧的时间戳(以秒为单位),只在video_refresh_timer函数中播放一帧视频前改变,is->video_current_pts_time单位为毫秒,在stream_component_open中初始化,也在video_refresh_timer函数中初始化。
这篇教程的难点是对synchronize_audio函数的理解,它的功能是测量声音的位置,把它与参考时间进行比较,然后算出我们需要修正多少的样本数,也就是说:我们是否需要通过丢弃样本的方式来加速播放还是需要通过插值样本的方式来放慢播放,这个函数在教程中有详细的说明。