本章是流媒体直播实时视频延迟时间排查和剖析

javaCV系列文章:

javacv开发详解之1:调用本机摄像头视频

javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)

javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗,更好的性能,更低延迟)

javaCV开发详解之9:基于gdigrab的windows屏幕画面抓取/采集(基于javacv的屏幕截屏、录屏功能)

javaCV开发详解之10:基于dshow调用windows摄像头视频和音频,想要获取屏幕画面首选gdigrab

补充篇:

javaCV开发详解补充篇:基于avfoundation的苹果Mac和ios获取屏幕画面及录屏/截屏以及摄像头画面和音频采样获取实现

音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)

音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例

实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

java原生实现屏幕设备遍历和屏幕采集(捕获)等功能

流媒体直播实时视频延迟时间排查和剖析

javacpp-ffmpeg系列:

javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片

javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据

javacpp-FFmpeg系列之3: 图像数据转换(BGR与BufferdImage互转,RGB与BufferdImage互转)

javacpp-FFmpeg系列补充:FFmpeg解决avformat_find_stream_info检索时间过长问题

javacpp-opencv系列:

一、javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作

二、javaCV图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制

三、javacv图像处理3:使用opencv原生方法遍历摄像头设备及调用(方便多摄像头遍历及调用,相比javacv更快的摄像头读取速度和效率,方便读取后的图像处理)

四、javacv图像处理系列:国内车辆牌照检测识别系统(万份测试准确率99.7%以上)

前言
本章作为延迟补充篇,我们在搭建直播平台等流媒体服务平台的时候总会遇到延迟的问题,很多人表示束手无策,不知从何下手去优化延迟。本章就从流媒体平台整体到协议细节来剖析和解决直播实时视频的延迟问题。

1、播放器延迟
(1)默认缓存延迟

目前已知VLC、videojs等播放器包含不定的缓存

解决办法:
(1)VLC可以在配置中设置低延迟
(2)videojs暂时无法自定义设置缓存大小和时间

(2)播放器查找音频导致延迟

目前已知VLC或者ffplay等播放器在播放rtmp或者flv的视频时,默认行为是分析5秒(rtmp)到90秒(以.flv做为后缀的url)数据查找媒体中是否包含音频。
在无音频的流中,这一播放器行为会造成起播和播放的视频时间延迟。

解决办法:
(1)ffplay可以加入参数”-analyzeduration 1”来实现秒开。
(2)vlc在配置中设置低延迟

2、GOP过长造成延迟
(1)视频本身的GOP设置也会造成额外的延时
例如,GOP关键帧间隔设为50,帧率时25,那么就可能造成约2秒的延时;以此类推。

(2)播放时间点与上一关键桢时间差
如果播放时间点与上一关键桢相差1秒,则会造成1秒的延时

3、流媒体服务缓存
只拿nginx和srs来讲,这两个默认都是有缓存时间的,但是可以通过设置来达到减少或零缓存。

4、转流或转码导致延迟
(1)转流需要拉流和推流两个操作,必然带来双向的网络延迟和缓存延迟。
(2)转码是计算密集型,耗时跟cpu性能有关,如果开启硬编码,则跟gpu性能有关。

5、B帧导致编解码延迟
使用ffmpeg转码时,禁用B帧。

(1)H264编码中的B帧解码需要I帧和临近的P帧才能解码,而且B帧不是顺序的,可能会出现B帧在很多个P帧后面,这时就需要缓存很多帧才能开始解码B帧,还有就是B帧的播放时间可能在这些P帧之前等等情况都会导致编解码延迟。
(2)B帧在编码时也需要缓存很多帧后才能开始编码,需要后面来了P帧才能开始编码的情况。

6、计算延迟时间
综上,目前实时流首帧打开时间简单的计算公式就是:MS+G+P+(SA)+C+N+(F)+(B)

MS表示流媒体服务缓存时间,G表示gop时间间隔,P表示播放时间与上一关键桢时间差,SA表示可能的音频查找时间,C表示播放器默认缓存时间,N表示网络延迟,F表示转流或转码导致延迟,B表示B帧导致的延迟。

结论
目前有很多解决办法来解决这些问题,比如已知可以通过cdn分发降低网络延迟,通过播放器降低缓存时间,通过合理的GOP设置和首帧返回关键帧等方式来优化延迟,尽量少的B帧可以缓解编解码延迟等等。
————————————————
版权声明:本文为CSDN博主「eguid_1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/eguid_1/article/details/105966743

【音视频】流媒体直播实时视频延迟时间排查和剖析:gop关键帧间隔导致延迟,流媒体和播放器缓存,B帧等导致的延迟相关推荐

  1. 安卓Android中腾讯音视频和直播 API的使用

    安卓Android中腾讯音视频和直播 API的使用 文章目录 安卓Android中腾讯音视频和直播 API的使用 前言:安卓Android中腾讯音视频和直播 API的使用,这里没有写UI,功能是放在一 ...

  2. 【音视频数据数据处理 12】【H.264篇】解析H.264原始码流中的I帧 / P帧 / B帧数据(暂未解决,本文先放着,来日更新)

    [音视频数据数据处理 12][H.264篇]解析H.264原始码流中的I帧 / P帧 / B帧数据 一.如何判断是 I帧 / P帧 / B帧 1.1 slice_type 1.2 slice_head ...

  3. 【音视频】直播CDN介绍

    0x1 前言 以下内容是从一个运维的角度看待问题,主要借鉴了某某云和某站的直播架构总结的经验,还加入了一些自己的思考,希望能在CDN这条道路上走得更远. 0x2 直播CDN介绍 一个直播业务,大致分为 ...

  4. Android音视频点/直播模块开发

    前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式 ...

  5. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  6. 深入了解音视频开发直播协议RTMP

    说起RTMP协议,相信很多人都比较陌生,这个协议相对HTTP.HTTPS.TCP等我们常见的协议而言,我们在工作中确实较少接触它,但是对现在如火如荼的直播行业,RTMP是一个重要的协议,它在实时音视频 ...

  7. android音/视频,直播

    流媒体 采用流式传输的方式在Internet / Intranet播放的媒体格式.流媒体的数据流随时传送随 时播放,只是在开始时有些延迟.边下载边播入的流式传输方式不仅使启动延时大幅度地缩短,而且对系 ...

  8. 知识付费音视频和直播播放器

    知识付费音视频播放和直播业务是使用基于浏览器环境的阿里云Web播放器SDK(Web Aliplayer SDK)为技术载体. 阿里云Web播放器SDK,支持Flash和H5两种播放技术,Flash模式 ...

  9. android MediaRecorder录制音视频实现直播的基础

    工作这么久,一直都很忙,好不容易闲下来就不习惯了.突然觉得应该做点有意义的事情,这几天研究了一下视屏直播方面的知识,使用camara,surfaceview,MediaRecorder录制音视频,su ...

最新文章

  1. air调用java,AIR2.0入门教程:与Java应用交互
  2. varchar汉字占几个字符_常用字符编码介绍
  3. 人工智能论坛_诚邀共享 | 2020人工智能医疗产业前瞻论坛
  4. android 动态添加删除控件,求教Android,动态添加到控件能动态删除吗?
  5. CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
  6. 一个高级的makefile文件
  7. AspNetCms 国内×××聚
  8. 深入浅出 Javascript API(二)--地图显示与基本操作
  9. v$session,v$session_wait,v$session_wait_history,v$active_session_history
  10. 安全方面的文章+VC知识库
  11. c语言编程2的10次方,疯狂编程,计算2的10万次方
  12. Fabric共识机制
  13. java计算机毕业设计Web前端开发技术儿童教育网站MyBatis+系统+LW文档+源码+调试部署
  14. 公司内网限制qq微信登陆--解决办法
  15. 解决java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionV
  16. 嵌入式AI开发:Maixduino目标识别分类
  17. java获取时间并进行计算
  18. Linux查看应用的CPU、内存使用情况
  19. matlab函数:eye函数
  20. 【教程+源码】Java开发经典游戏飞翔的小鸟_Java游戏项目Flappy Bird像素鸟游戏

热门文章

  1. Linux使用gpu渲染桌面,Firefox Nightly新版已经支持GPU网页渲染,Linux等全平台可用...
  2. 实时热力图_呈贡哪里人气最旺?百度热力图告诉你,原来人都聚集在这些地方!...
  3. 专题 | css之选择器
  4. 使用百度AI实现视频的人流量统计(静态+动态)代码及效果演示
  5. jsp日报系统+mysql_工作日报系统软件(运行web程序+说明) 日报管理系统 - 下载 - 搜珍网...
  6. 卡巴斯基起诉江民杀毒软件侵权
  7. 微信公众号录音文件保存到自己开发的服务器(amr文件转mp3)
  8. 用javascript来实现计算用户输入用电量,自动计算出电费多少,分三档计费
  9. SmartNovel——自动帮你写文章
  10. jupyter lab 相关