音频和视频之间的延迟

音频和视频之间的延迟通俗讲就叫做“音视频同步误差”,音视频同步误差普遍是通过观察视频画面和听到的声音之间是否有明显差距来判断,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

上述命令的意思是将节目帧序号直接写到画面上冰重新编码成视频流。

2.准备好测试节目,用ffmpeg向云端推流,例如我们在局域网搭建了一个测试用的rtmp服务器,推流命令如下:

./ffmpeg -re -i output.mkv -c copy -f flv -y rtmp://192.168.31.10/encoder/streama

3.使用播放器播放该直播流,需要注意的是因为是测试延迟,所以播放器对缓冲区需要设置到最低。例如使用ffplay播放的命令如下:

./ffplay -fflags nobuffer -rtmp_buffer 0 -rtmp_live live -rtmp_buffer_size 0 rtmp://192.168.31.10/encoder/stream

4.截图,由于ffmpeg推流过程中会显示当前正在处理帧的序号,而播放器显示的画面中也包含了当前帧的序号,两个帧序号相减即得到两者相差的帧数,而视频帧率一般是固定的,帧间隔时间也是固定的,所以延迟就等于n*t,其中n是相差的帧数,t是帧间隔时间。

drawtext ffmpeg 倾斜_ffmpeg drawtext在视频延迟测量上的应用相关推荐

  1. drawtext ffmpeg 倾斜_ffmpeg # drawtext 进阶

    预备知识 between(x, min, max) Return 1 if x is greater than or equal to min and lesser than or equal to ...

  2. FFmpeg源码分析:视频滤镜介绍(上)

    FFmpeg在libavfilter模块提供音视频滤镜.所有的视频滤镜都注册在libavfilter/allfilters.c.我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤 ...

  3. ffmpeg 字体android,FFMPEG:添加字体到视频给出错误

    我想在android上执行ffmpeg.我也成功执行了2-3个命令.但我坚持在一个点我将文本添加到视频.FFMPEG:添加字体到视频给出错误 这是我正在执行的命令. 不工作:因为text说法有两个词之 ...

  4. FFmpeg源码分析:视频滤镜介绍(下)

    FFmpeg在libavfilter模块提供音视频滤镜.所有的视频滤镜都注册在libavfilter/allfilters.c.我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤 ...

  5. 【前端】使用ffmpeg+vue3实现简单的视频编辑器

    使用ffmpeg+vue3实现简单的视频编辑器 主要依赖 '@ffmpeg/ffmpeg','vue' 实现功能 视频转码,添加文字水印,添加图片水印,处理进度条和用时,文件编码信息,生成序列帧. 界 ...

  6. 基于ffmpeg+SDL 实时播放摄像头视频

    基于ffmpeg+SDL 实时播放摄像头视频 基本流程 udp接收rtp数据流接收一帧数据后,转换为NAL单元送去解码 (这里特别说明一下,我本次用的接口是支持从连续数据流中自动分割出一个个NAL的, ...

  7. HLS + ffmpeg 实现动态码流视频服务

    一.简介 如下图,包含三部分,右边一列为边缘节点:中间一列代表数据中心:左边一列是项目为客户提供的一系列web管理工具: 具体来说在我们项目中有一堆边缘节点,每个节点上部署一台强大的GPU服务器及N个 ...

  8. ffmpeg api的应用——提取视频图片

    这些年来,"短视频"吸引了无数网民的注意.相对于丰富有趣的内容,我们码农可能更关心其底层技术实现.本系列文章将结合ffmpeg,讲解几则视频处理案例.(转载请指明出于breakso ...

  9. m3u8链接地址_FFmpeg下载m3u8视频

    绪言 近日在上网课,便想尝试把网课回放扒下来备用,结果是不好下载的m3u8格式.网上看了很多关于m3u8下载的文章,大多比较麻烦,我今日试验出一种较为方便的方式,运用FFmpeg直接转码m3u8视频为 ...

最新文章

  1. java十四章带参方法课后_java14带参的方法
  2. vfatfs.sys加载
  3. Android Studio 3.0 下 Cordova 打包时 Gradle 兼容性问题解决
  4. Android 系统(16)---应用启动过程
  5. 关于小微商户反欺诈监控指标的内容参考
  6. 传统IT架构转型,从云原生平台到微服务应用构建
  7. java string 截取中文乱码_Java如何处理中文乱码问题
  8. (創世紀)神的儿子们看见人的…
  9. 北京邮电大学砸彩蛋大作业
  10. 测试英语口语软件,‎App Store 上的“英语口语8000句 - 最新英语口语听力查词软件”...
  11. zTree简单暴力修改图标样式
  12. 银行数据仓库体系实践_【实战剖析】某国际性商业银行的数据仓库建设经验分享...
  13. java的意思和含义,2022年最新
  14. 心拔凉拔凉五连追问No.58
  15. [noip模拟赛2017.7.4]
  16. 【穿越百年咖啡厅Café logo,经典不败设计 】
  17. 解决adb输入中文以及乱码的问题
  18. 计算机专业一学期多少学分,关于2019-2020学年第一学期学分制课程重修报名通知...
  19. 2017 年 9 月26 日
  20. dpcm编码 matlab程序,DPCM预测编码的MATLAB原代码: | 学步园

热门文章

  1. AXI DMA IP核操作流程
  2. PCIe之DMA (三)
  3. 先进先出(FIFO)置换算法
  4. 视频添加水印 抖音拍摄技巧
  5. 基于vue的毕业生就业信息管理系统
  6. IP归属地在线查询平台 javaSE
  7. 武林传刀剑江湖录(下)攻略
  8. 电商企业如何操作自动化软件鼓励员工创新
  9. YUV420P图片分离Y/U/V分量并显示验证
  10. 获取上市公司数据的几个渠道,最好的也许是东方财富