相关文章推荐

ffmpeg drawtext在视频延迟测量上的应用

音频和视频之间的延迟

音频和视频之间的延迟通俗讲就叫做“音视频同步误差”,音视频同步误差普遍是通过观察视频画面和听到的声音之间是否有明显差距来判断,ffplay中还可以通过比对音频和视频当前播放的pts之间的差距判断误差。这些判断方法虽然可以大致判断音视频是否同步,但是无法知道确切的误差值,即可以定性但是无法定量。这里介绍一种音视频同步误差的判断方法,借助ffmpeg对视频画面进行标记,然后对比标记和音频时间的差距即可得出同步误差值。本方法的前提是音视频节目是正常的,即不会出现音频数据在节目数据中非常稀疏的存放的情况。具体方法如下:


1.使用ffmpeg对视频画面进行标记。首先选取一个固定帧率的视频节目,推荐25fps、30fps这种整数帧率的节目,因为帧率固定,则可以知道每一帧的间隔都是固定的,例如25fps的节目,第一帧时间是0,第二帧的时间就说40ms,第三帧的时间就是80ms。以第一帧时间为0开始,对每一帧画面标记上相对第一帧的时间,也就是视频画面的进度。命令如下:

./ffmpeg -i intput.mkv -vf "drawtext=fontfile=arial.ttf:text='%{pts\:hms}':fontcolor=white:fontsize=24:x=640:y=100:shadowx=1:shadowy=1" -vcodec h264 -preset veryfast -y output.mkv

意思是将节目的pts以hms形式写到视频画面中,这样每一帧画面所标记的时间,就说它对应的pts时间,可以很清晰的看出画面播放到哪个位置了。

准备好测试节目后,播放即可,随意的暂停恢复播放,获取当前播放的音频时间,与视频画面上的时间对比,即可知道音视频同步误差。

直播延迟时间的测量

互联网直播都是有延迟的,延迟时间分布在发布端编码延迟、发布端云端节点的网络延迟、cdn分发延迟、cdn到播放端的网络延迟、播放端接嘛延迟。然而延迟是多少往往只能估计,有一种办法是手机作为发布端,手机摄像头拍摄电脑上的秒表,然后电脑上播放该直播地址,然后对比电脑上的时间和播放器中画面显示的时间的差距来得出直播延迟。这种方法还需要借助手机摄像头来进行录像然后手机推流,一般用的是无线网络,有一定可能受Wi-Fi信号影响,导致延迟测试不太准确。

这里介绍一种更为直接的测试方法,可以比较准确的测试网络延迟,具体如下:

1.使用ffmpeg对视频帧进行标记,这次只需要标记当前帧是哪一帧,即帧序号。命令如下:

./ffmpeg -i input.mkv -vf “drawtext=fontfile=arial.ttf:text=%{n}:fontcolor=white:fontsize=24:x=640:y=100:shadowx=1:shadowy=1” -vcodec h264 -preset veryfast -acodec copy -y output.mkv

 
推荐文章