现象

最近团队在做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 743D Chloe and pleasant prizes(树型DP)

                                                                D. Chloe and pleasant prizes             ...

  2. (入门SpringBoot)SpringBoot发送邮件(十一)

    SpringBoot配置邮件服务: 1.引入jar <!-- 邮件 --> <dependency>    <groupId>org.springframework ...

  3. 原生js获取元素的样式信息

    工作中经常会需要获取DOM元素的样式,之前都是通过jquery的css()方法,现在总结一下通过原生js获取元素样式的方法. obj.style js var _width = obj.style.w ...

  4. ASIHTTPRequest 问题总结

    1, ASIHttpRequest与30秒超时 今天在项目中发现一个ASIHttpRequest的Bug.这个Bug可能会导致你Http请求延时至少在timeout设置时间结束之后.更可怕的是,为了找 ...

  5. Java Web开发(JSP、Servlet)乱码的一揽子解决方案

    千万不要看网上那些杂七杂八的解决乱码的文章,解决乱码最好的方法是(没有之一):在所有地方统一采用UTF-8编码. 这其中包括: 1 - 工程 如果使用的是Eclipse,那么打开Preference, ...

  6. linux 学习解决归档管理器打开rar和zip中文文件名乱码问题

    在ubunut下打开windows下压缩的rar文件和zip压缩文件出现中文文件名乱码的问题真的很头疼.文件名乱码其实也没有什么关系是不?至少重命名再改回来或者是使用英文命名都可以克服.不巧的是,如此 ...

  7. sublimetext3打造pythonIDE

    虽然pycharm是非常好用的pythonIDE,用来开发项目很方便,但是修改调整单个或几个小程序就显得很笨重,这时候我们可以选择使用sublime. 一般来说要开发项目我都用pycharm,开发简单 ...

  8. 用PROXYCHAINS实现SSH全局代理

    NUX下可以实现SSH全局代理的软件有tsocks和proxychains两种,但是个人感觉proxychains要更加稳定简单. $ yum install proxychains # vim /e ...

  9. vuex 中关于 mapState 的作用

    辅助函数 Vuex 除了提供我们 Store 对象外,还对外提供了一系列的辅助函数,方便我们在代码中使用 Vuex,提供了操作 store 的各种属性的一系列语法糖,下面我们来一起看一下: mapSt ...

  10. 环信ONE SDK架构介绍

    环信ONE SDK架构介绍 摘要 环信即时通讯SDK自2014年6月正式公布2.0版本号至今已走过一个年头.从主要的单聊功能,到群聊功能,再到聊天室的实现.SDK无论是功能.稳定性,还是易集成性都在一 ...