转自:http://blog.chinaunix.net/uid-26000296-id-4932826.html

编码器用FMLE,用手机秒表作为延迟计算。

结论:

1. 影响延迟的三个重要因素:网络带宽不足延迟越大,服务器算法缓存越多延迟越大,编码gop越大延迟越大

2. 若只考虑服务器,NGINX-RTMP做源站时延迟在2-3秒以上。

3. 若只考虑服务器,SmartServer做边缘延迟最小在0.3秒,多级边缘服务器没有影响。

服务器结构如下:

源站:NGINX-RTMP

一级边缘:SmartServer

二级边缘:SmartServer

图片从左到右为:手机秒表,源站,一级边缘,二级边缘;

一、H264-Baseline-1秒GOP

H264,baseline,gop=1秒,fps=20,bitrate=500kbps

可见,延迟主要是在NGINX-RTMP,边缘服务器的延迟算法让延迟最低。

改变编码参数:

二、H264-Baseline-5秒GOP

H264,baseline,gop=5秒,fps=20,bitrate=500kbps

可见,gop变大后,每层都会有随机的延迟,原因是缓存了一些数据。

基本上5秒gop,就会有5/2秒延迟,即2.5秒左右延迟。

改变编码参数gop为10秒:

H264-Baseline-10秒GOP

H264,baseline,gop=10秒,fps=20,bitrate=500kbps

gop大了之后,延迟就要拼人品了。

改变编码参数为main:

三、H264-Main-1秒GOP

H264,main,gop=1秒,fps=20,bitrate=500kbps

基本上和baseline差不多。

没有什么影响,除了我的CPU上去了。

编码参数改为VP6:

四、VP6-1秒GOP

VP6 Quality=GoodQuality-GoodFramerate NoiseReduction=None DatarateWindow=Medium CPUUsage=Dedicated gop=1秒 fps=20

可见VP6也是一样,延迟在NGINX-RTMP源站,边缘没有延迟。

编码参数改为VP6,gop为10秒:

五、VP6-10秒GOP

VP6 Quality=GoodQuality-GoodFramerate NoiseReduction=None DatarateWindow=Medium CPUUsage=Dedicated gop=10秒 fps=20

可见VP6时也一样受gop影响。

六、HTTP切片方式的延迟

H264 Baseline gop=1秒 fps=20

HTTP切片长度为1秒

从左到右依次为:编码器,NGINX-RTMP源站,SmartServer边缘,HTTP切片边缘

可见:
NGINX-RTMP源站延迟在1.4秒

SmartServerRTMP边缘延迟0.6秒

HTTP切片边缘延迟1.1秒

实际环境中,1秒一个切片,在CDN分发时,下载的速度可能没有这么快,所以延迟应该会比这个高。

RTMP服务器的延迟,多级边缘不影响延迟,gop为最大因素的更多相关文章

  1. Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...

  2. 利用docker搭建rtmp服务器(1)

    以后的项目里面可能需要用到直播,所以就先看看 本来想在自己MAC上搭建nginx的,后来怕把自己的机子搞乱,刚好就学习了下docker,感觉docker强大就在于是一个操作系统软件的版本管理系统,可以 ...

  3. 实现输出h264直播流的rtmp服务器

    RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及pc.移动.嵌入式等平台,是做流媒体开发 ...

  4. 实现输出h264直播流的rtmp服务器 flash直播服务器【转】

    实现输出h264直播流的rtmp服务器 RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及 ...

  5. 实现输出h264直播流的rtmp服务器 flash直播服务器

    http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html 实现输出h264直播流的rtmp服务器 RTMP(Real Time ...

  6. Mac使用nginx+rtmp服务器

    一.安装Homebrow 已经安装了brow的可以直接跳过这一步.执行命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H ...

  7. 推送安霸A7L实时视频至RTMP服务器(1)

    使用librtmp进行H264与AAC直播 (转:http://www.codeman.net/2014/01/439.html) 1.帧的划分 1.1 H.264帧 对于H.264而言每帧的界定符为 ...

  8. 超级rtmp服务器和屌丝wowza

    超级rtmp服务器和屌丝wowza http://blog.csdn.net/win_lin/article/details/11927973

  9. FFMPEG推流到RTMP服务器命令 - weixin_37897683的博客 - CSDN博客 https://blog.csdn.net/weixin_37897683/article/details/81225228

    FFMPEG推流到RTMP服务器命令 - weixin_37897683的博客 - CSDN博客 https://blog.csdn.net/weixin_37897683/article/detai ...

随机推荐

  1. Inversions After Shuffle CodeForces - 749E (概率,期望)

    大意: 给定一个$n$排列, 随机选一个区间, 求将区间随机重排后整个序列的逆序对期望. 考虑对区间$[l,r]$重排后逆序对的变化, 显然只有区间[l,r]内部会发生改变 而长为$k$的随机排列期望 ...

  2. 解决iframe缓存机制导致页面不清除缓存不刷新页面的bug

    在使用iframe时,已有页面嵌套了一个iframe页面,当这个页面提交后再次跳转到本页面时,原本iframe内的页面应该刷新数据的,结果未刷新,需要清除缓存后才刷新. 解决方案: var fresh ...

  3. Openresrt最佳案例

    第1篇:Nginx介绍 Nginx是一个高性能的Web 服务器,同时是一个高效的反向代理服务器,它还是一个IMAP/POP3/SMTP 代理服务器. 由于Nginx采用的是事件驱动的架构,能够处理并发 ...

  4. Jquery复习(一)之animate()易忘点

    可以用 animate() 方法来操作所有 CSS 属性吗? 是的,几乎可以!不过,需要记住一件重要的事情:当使用 animate() 时,必须使用 Camel 标记法书写所有的属性名,比如,必须使用 ...

  5. vue与react对比

    相同点 1.都使用 virtual DOM 2.都是组件化开发 or 都提供了组件化的视图组件 3.数据的改变会引起视图的二次渲染 4.都只有骨架,其他的功能如路由.状态管理等是框架分离的组件. 5. ...

  6. 2019-11-29-dotnet-core-使用-CoreRT-将程序编译为-Native-程序

    title author date CreateTime categories dotnet core 使用 CoreRT 将程序编译为 Native 程序 lindexi 2019-11-29 08 ...

  7. 右则css 小浮条

    <!--右边浮动--> <div class="indexfu"> <div class="indexfu2" id=" ...

  8. 003-SaltStack入门篇之远程执行和配置管理

    第一条命令: [root@linux-node1 master]# salt '*' test.ping linux-node2.example.com: True linux-node1.examp ...

  9. SSH整合——登录模块

    1.导包——参照我的GitHub Hibernate hibernate/lib/required hibernate/lib/jpa 数据库驱动 Struts2 struts-blank.war/W ...

  10. Spring配置搭建——Spring学习 day1

    对象准备 1.导包 Spring core ,context ,beans ,expression ,aop Apache commons logging 2.写入一个对象 这边写入User对象 3. ...