现象

最近团队在做EasyDSS RTMP流媒体服务器开发的过程中,遇到了一个关于延时累积的问题,先大概描述一下过程:

EasyRTMP Android进行长时间的RTMP推流压力测试,在EasyDSS的web客户端中进行Flash播放,起初进行播放的开始阶段,延时是极小的,大概在0.4s左右,但随着播放过程的延长,我们会观察到一个现象,一旦客户端出现一次缓冲或者停顿,网页播放的时延就会增加,而且是不会恢复的,最终越来越长越来越长!

判断与结论

于是我们就一直在怀疑到底是EasyRTMP推流端的缓冲造成了延时,还是服务器端的累积造成了延时,还是播放器端的缓冲区造成了延时;

  • 我们先从排查推流端入手,我们发现每一次的重新开始播放,延时都会是极小的0.4s左右,播放过程延时累积,那么这样就可以排除是推流造成的延时了,因为低延时的数据已经推送到服务器了;

  • 再排查服务器端,那只有从EasyDSS的发送缓冲区入手了,通过这个过程中的打印,缓冲区确实是在增加,那么为什么会增加呢?

  • 播放器端我们进行了调整,将播放器的缓冲区调整到了0.5s,但同样还是会累计延时,那么是否可以判断就是服务器造成的延时?

于是,我们又进行了更进一步的测试,我们将服务器端进行修改,对推流的时间戳进行人为的调整,将时间戳调小(比如视频原来每帧的时间间隔是40ms,我们改到20ms),让flash播放器根据新的时间戳播放,保持一种快进的模式,这样播放器就一直处于一种消费>生产的情况,一直都处于饥饿模式,本地不会缓冲数据,结果发现,延时确实一直很低,而且快产快消,比较稳定的低延时;

反复的讨论和验证,我们得出结论:

播放器在播放的过程中,遇到网络抖动的情况或者数据缓冲区的情况,还是会一如既往地将原有的音视频数据正常播放完成,那么中间这个缓冲的时间和卡顿的时间就累计起来了,而我们播放器缓冲区开的就算比较小,也无法解决整个延时累积的问题,因为播放器缓冲区始终保持一个饱满状态,那么播放器对服务器的数据读取就没那么迅速,也导致了服务器端的缓冲区累积;

解决思路

类似同样的过程在之前我们的EasyPlayer RTSP播放器中也曾遇到,而RTSP播放器作为了一个Real Time的协议,需要保证的是播放的完整和低延时,所以,当时在缓冲区和播放的过程中,做了一个播放追帧的效果,也就是说当缓冲区比较大的时候,播放会倍数快进播放,追赶延时的累积,这样会给用户一个比较好的低延时体验,那么,我们的EasyPlayer flash播放器的开发也会采用这种方式,直播过程中采用追帧的效果,保持一个比较hungry的状态!

关于EasyDSS流媒体服务器

EasyDSS商用流媒体服务器解决方案是一套集流媒体点播、转码与管理、直播、录像、检索、时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP流媒体服务器支持RTMP推流,同步输出HTTP、RTMP、HLS、HTTP-FLV,支持推流分发/拉流分发,支持秒开、GOP缓冲、录像、检索、回放、录像下载、网页管理等多种功能,是目前市面上最合理的一款商用流媒体服务器!

详细说明:http://www.easydss.com/

点击链接加入群【EasyDSS流媒体服务器】:560148162

关于EasyPlayerPro

EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP、RTMP、HTTP、HLS、UDP、RTP等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放等多种功能特性,稳定、高效、可靠,支持Windows、Android、iOS三个平台,目前在多家教育、安防、行业型公司,都得到的应用,广受好评!

EasyPlayerPro:https://github.com/EasyDSS/EasyPlayerPro

点击链接加入群【EasyPlayer & EasyPlayerPro】:544917793

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器的更多相关文章

  1. 夺命雷公狗---微信开发59----在线点播电影网1之ckplayer播放器

    我们节课程就要开始写一个小项目了,这项目主要是写一个在线点播电影影网的,我们用到的播放器是ckplayer ckplayer基本介绍: ckplayer的全称是:超酷flv播放器,他是一款用于网页上播 ...

  2. PLDroidPlayer 是七牛推出的一款免费的适用于 Android 平台的播放器 SDK,采用全自研的跨平台播放内核,拥有丰富的功能和优异的性能,可高度定制化和二次开发。 https://developer.qiniu.com/pili/sdk/…

    PLDroidPlayer PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 ...

  3. 一款类似B站的开源弹幕播放器,太酷了

    今天小编推荐一款开源的弹幕视频播放器,由Typescript加Sass编写,无任何第三方运行时依赖,Gzip大小只有21KB,兼容IE11,支持SSR,支持直播.该播放器高度可定制,所有图标.按钮.色 ...

  4. Android开发6:Service的使用(简单音乐播放器的实现)

    前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service ...

  5. 利用阿里云如何开发一款直播app?

    在开发的过程中应该注意些什么?下面让小编告诉你: 随着互联网的发展,越来越多的人已经加入互联网的行列.而且很多的人也开始直播,和众多的网友分享自己身边事情.互联网还在加速发展,从PC互联网,到移动互联 ...

  6. 7款超具个性的HTML5播放器

    这篇文章我们要分享一些很有个性的HTML5音乐播放器和视频播放器,它们都具有播放器的大部分功能,并以HTML5和JavaScript实现.这些HTML5播放器有着非常漂亮的外观,很多你都无需自己重新定 ...

  7. wap html5播放器和直播开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 去年年中的时候,借着产品改版的机会,将之前的h5播放器好好整理重构了一番.之前的h5播放器较为简陋,有几个大 ...

  8. 基于Basys2开发板的简易电子琴和音乐播放器设计

    背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...

  9. 抛开flash,自己开发实现C++ RTMP直播流播放器

    抛开flash,自己开发实现C++ RTMP直播流播放器 众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中.本人研究并用C++开发实现了RTMP直播流协议的播放器 ...

随机推荐

  1. Codeforces 629 B. Far Relative’s Problem

      B. Far Relative’s Problem   time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  2. Oracle 索引(转)

    一.索引介绍 1.1 索引的创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema> ...

  3. JAVA基础之集合、Iterator迭代器、泛型及增强for循环

    个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...

  4. ios开发小结之app发布升级

    在近两个月的开发中,遇到了挺多问题的,几天加班加点,最后还是在年前发布并更新了一个版本,欢迎下载无觅下载. 最头疼的问题是提交app审核,之前的工程不太规范,导致一些文件icon没有设置好,直接val ...

  5. php开发中sql语句拼接示例

    1.插入语句 $sql="insert into Ad(AdClassID,AdType,AdTit,AdFileName,AdUrl,AShow,Addtime) values('&quo ...

  6. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...

  7. DevExpress控件之TreeList

    基于v18.1 使用AppendNode方法手动赋值时,首先要添加treeListColumn 默认样式                                     修改后的样式   1 ...

  8. PropertyGrid—隐藏某些Public属性

    1.定义一个继承ControlDesigner 的类 public class MyControlDesigner:System.Windows.Forms.Design.ControlDesigne ...

  9. Esper epl语句实验

    基础代码见下,下文列举的实验都是在此程序基础上改动. all,snapshot,first String epl = "select * from appTable.win:time(5 s ...

  10. 手把手教你画AndroidK线分时图及指标

    先废话一下:来到公司之前.项目是由外包公司做的,面试初,没有接触过分时图k线这块,认为好难,我能搞定不.可是一段时间之后,发现之前做的那是一片稀烂,可是这货是主功能啊.迟早的自己操刀,痛下决心,开搞, ...