不知大家有没有发现FFmpeg长时间解码会出现延时增大(特别是在丢包的情况下)?如果在播放本地文件,这个问题是没有影响的。但是如果播放的是实时流,则图像的延时就越来越大。本人是做安防监控的,很多招标项目对解码器的图像延时都有要求:不能高于250毫秒。所以,对实时性要求高的场合,要尽量降低图像的延时。

网络摄像头从采集图像到通过网络传输到客户端解码的过程中都会产生延时,一般延时有几部分组成:编码延时、网络传输延时、解码延时。编码延时是由编码器产生的,只能由设备方去改善,如果是FFmpeg软编码的方式,也是需要优化的,优化方法见我的另外一篇博文怎么降低FFmpeg的编码延时。网络传输延时一般很小。解码延时是产生延时的一个很重要的部分,所以我们要想办法降低解码时的延时。优化解码延时的方法我归纳如下:

第一,减少视频的缓冲帧数,尽量收到视频就送去解码。

第二,从网络接收数据,解码,还有显示操作用多线程处理,从而提高并发性。一般地,我们做播放器会把数据接收+解码放在一个线程处理,而显示放在另外一个线程;或者数据接收用一个线程,而解码+显示放在另外一个线程。中间实现一个缓冲队列,把第一个线程输出的数据扔到缓冲区,而第二个线程从队列里取数据,读到一帧就马上解码或显示。这样可以保证数据包可以得到最快的速度的处理,不会因为网络阻塞而影响后面的处理流程。

第三,清空FFmpeg编码器的缓冲区。当前面两种方法都无效时,这种方法可能就最管用了。在网络环境中,传输数据用UDP经常有丢包,而丢包很容易造成FFmpeg解码器缓冲的帧数增加。解决办法是:隔一段时间清空解码器缓存。伪代码如下:

int got_picture = 0;//重置解码器,在解码I帧之前清空解码器缓存//m_bReset为True,表示即将清空解码器缓存
if(m_bReset && nFrameType ==1)
{avcodec_flush_buffers(m_pVideoCodecCtx); m_bReset = FALSE;
}AVPacket avpkt;
av_init_packet(&avpkt);avpkt.size = inLen;
avpkt.data = inbuf;int len = avcodec_decode_video2(m_pVideoCodecCtx, picture, &got_picture, &avpkt);
if (len < 0)
{TRACE("Error while decoding frame Len %d\n", inLen);return FALSE;
}

不过要注意的是:不能任何一帧前都可以进行清空操作,理想是在I帧之前做清空,否则图像会有不连续或马赛克的现象。

降低FFmpeg的解码延时相关推荐

  1. ffmpeg硬解码与软解码的压测对比

    文章目录 ffmpeg硬解码与软解码的压测 一.基本知识 二.压测实验 1. 实验条件及工具说明 2. 压测脚本 3. 实验数据结果 ffmpeg硬解码与软解码的压测 一.基本知识 本文基于intel ...

  2. ffmpeg+nvidia解码SDK+GPU实现视频流硬解码成Mat

    方法原理 rtsp流解码方式分为两种:硬解码和软解码.软解码一般通过ffmpeg编解码库实现,但是cpu占用率很高,解码一路1080p视频cpu占用率达到70%左右,对实际应用来说,严重影响机器最大解 ...

  3. FFmpeg实时解码H264

    ffmpeg的解码过程在前面已经稍微总结了下,这里主要是测试一下用ffmpeg如何进行实时的解码. 在解码之前,我们先做好准备工作,调用摄像头.编码的过程中,进行入队出队操作,出队后的数据交给解码器, ...

  4. 【Qt+FFmpeg】解码播放本地视频(二)——实现播放、暂停、重播、倍速功能

    目录 一.FFmpeg解码流程图 二.播放.暂停.重播.倍速功能实现 1.创建播放.重播和倍速按钮 2.设置布局.样式.没有播放完毕前隐藏重播按钮 3.绑定信号槽 4.实现槽函数 (1)暂停和播放 ( ...

  5. 264编码基本概念 FFMpeg的解码流程

    下面转自http://topic.csdn.net/u/20081020/16/7156e0b2-dbfb-4b4f-af59-2be04cf9a420.html 的8楼 1.NAL.Slice与fr ...

  6. ffmpeg 硬解码

    ffmpeg 硬件解码 由于现在h264,h265视频的增多,分辨率增大,甚至2k,4k监控视频的增多,需要利用硬件来实现高效解码和AI识别等的情况越来越多,日益重要,显卡GPU的算力强大,可以提供更 ...

  7. 导致解码延时/丢帧的语法元素—H264

    //***************************可能导致解码延时的语法元素****************************// VUI 中有这样的信息: num_reorder_fr ...

  8. ffmpeg中音频解码方法(附代码)+ffmpeg音频解码播放速度快的问题(随手笔记,以供查阅)

    最近在做一款取名为变速不变调播放器的时候,解码音频遇到了些问题(ffmpeg音频解码播放速度快的问题),网络上的方法对绝大多数的音视频文件有效,但是对于某些音频会有问题,比如某些ADPCM编码的WAV ...

  9. ffmpeg 音频解码一

    1. ffmpeg 视频解码一 2. ffmpeg 视频解码二 3. ffmpeg 音频解码一 4. ffmpeg 音频解码二 5. ffmpeg 音视频解码 6. ffmpeg 视频编码一 7. f ...

最新文章

  1. 纯数学教程 Page 325 例LXVIII (13)
  2. webstorm设置注释颜色_简单5步了解相关矩阵的注释热图
  3. 如何在同一台电脑上部署多个tomcat服务器
  4. mysql的三大特性_【mysql】Innodb三大特性之double write
  5. java allocate_Java中volatile关键字的最全总结
  6. 语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}
  7. 使用Docker快速搭建FTP服务器
  8. Poly Network现已支持以太坊至币安智能链及火币生态链一键跨链
  9. 今天我们谈一下HTML标签中的map标签的用法和使用场景
  10. 1198_MISRA_C规范学习笔记_Rule 8.6 Rule 8.7
  11. opencv python 巡线 最小二乘法
  12. 大脑的终极秘密——从狮子也有意识谈起
  13. 第四篇、代理模式详解(三种)
  14. 推荐四个在线任务管理网站
  15. 怎么把Excel表格旋转90°显示
  16. SQL中row_numer、rank、dense_rank的区别与用途
  17. 《Python3 网络爬虫开发实战》:关系型数据库 MySQL 存储
  18. 将一台笔记本电脑作为另一台笔记本电脑的扩展显示器
  19. php大商创 安装,【大商创使用教程】大商创2.0数据库配置及安装教程
  20. Android工程师进阶之路 Android开发进阶 从小工到专家 上市啦

热门文章

  1. Android自定义虚线
  2. 用python收取邮件的一个实例
  3. 心灵感应和量子力学01------第五维空间
  4. 提高网页可访问性的十条建议
  5. fromCharCode()和charCodeAt()
  6. Element-UI+vue实现登录表单
  7. 网络协议——网络架构
  8. 思否这个哥们的文章,真是太香了!!
  9. 应广单片机PMS150/PMC150/PMS150C消费类单片机
  10. matlab ellip传递函数,BPSK和QPSK调制解调原理及MATLAB程序