一、背景
某个视频播放过程中出现音频超前播放,而且越播放越不同步。视频文件的参数如下:
项目采用ffms2+avisynth的框架
二、分析过程(ffms2)
音频比视频短
1、 既然是音频播放超前,那么要么是画面播放太慢了,要么是音频播快了。首先分析了视频播放流程,确定了和视频丢帧没关系,即便丢帧再快,视频也都跟不上音频
2、接下来就重点分析音频了,用ffprobe从视频文件中抓取到音频包,大概内容如下
3、从2中可以看到,每个音频包的采样点个数,即nb_samples
都是1024,pkt_duration
也大部分都是1024,但是存在个别音频包未4016或者其他值
4、查阅资料,pkt_duration
为单帧音频播放的时间,单位是1/44100 s。所以这个文件的播放时间不能由采样点来决定,而应该结合pkt_duration
来决定
5、再分析解析文件时长的方式,在写index的过程找到了这行代码
stre