首页 > 其他分享 >技术分享| anyRTC低延时直播优化

技术分享| anyRTC低延时直播优化

时间:2023-10-27 15:33:31浏览次数:40  
标签:播放器 anyRTC 时延 队列 直播 延时 播放 卡顿

直播系统就是把活动现场的音频或视频信号经数字压缩后,传送到直播多媒体服务器(CDN)上,在互联网上供广大网友或授权特定人群收听或收看。而随着技术的日益更新,人民对于直播的互动性,实时性要求更高了,传统的直播少则几十秒,多则几分钟的时延很难满足现在的很多直播场景。今天我们就从播放器端来聊一下anyRTC是如何在端侧做到更低时延的播放效果的。

一.播放器工作原理

在这里插入图片描述

播放器的模块大致分为:解封装,数据包队列,解码,帧队列,渲染等几大模块,然后组成一套播放逻辑,基本上所有的播放器的功能实现也都大同小异。

1.解封装即Demuxer,我们通常使用FFMpeg来做。

2.数据包队列,这里是延时优化的重点区域,因为此队列中可能会缓存大量的数据,我们可以通过音视频包的PTS或者Duration来计算出队列中的总时长,从而进行播放器的时延优化。

3.解码,通常在端侧使用软件或硬件解码,二者的效率差异更多的是在Cpu的消耗,主要影响的是机器的发热,播放的流畅性。

4.帧队列,是解码之后的图像或音频数据,等待渲染。

5.渲染,是将图像或音频数据丢入系统,由系统进行对应的输出。

二.如何降低时延

在播放端,对于延时影响最大的是数据包队列。只要网络有抖动或者卡顿,播放器端的累积延迟会逐步加大。

很多的技术文章说直播优化延迟的都是丢帧策略,最直接的:清缓存数据队列,虽然这个方法可以短时间内降低延迟,但是强行跳帧,直播内容强行被跳过,严重影响体验;如果丢Gop里面的B帧,非参考帧或者序列里面最后几个P帧等;或者丢部分音频数据包,视频帧时间戳同步音频来达到数据的加速消耗等。但是实际效果均对用户体验产生一定影响。

所以一个好的追帧策略,对于低延时播放非常的重要,对于播放器来说,越多的缓存就意味着更低的卡顿率,如果缓存一直保持的低位,卡顿率则会明显提高。如何平衡低时延和卡顿率之间的关系,是我们需要重点考量的。以下是我们提出的是一个追帧简易模型,以一个参数进行举例:

在这里插入图片描述

1.当缓冲区时长大于5s时,进行1.1倍加速。

2.当缓冲区时长大于2s时,进行1.05倍加速。

3.当缓冲区时长小于等于1s时,正常速度播放。

4.对卡顿进行统计,如果一定时间内,比如3分钟内,卡顿了5次,进行线路切换。

三.总结

经过anyRTC大量的测试和线上真实环境运行,可以验证基于追帧模型的播放器可以在卡顿率和低时延上找到一个相对平衡点,有效的提升了用户的体验。

在这里插入图片描述

标签:播放器,anyRTC,时延,队列,直播,延时,播放,卡顿
From: https://www.cnblogs.com/anyrtc/p/17792453.html

相关文章

  • 直播源码开发,实现 scroll-view 自动滚动到底部,并控制触发频率
    直播源码开发,实现scroll-view自动滚动到底部,并控制触发频率HTML scroll-view固定高度,允许纵向滚动,scrollTop值通过变量动态改变。将scroll-view内容区域通过view标签进行包裹。 <scroll-viewclass="dialogue-box":scroll-y="true":scroll-top="scrollTop"> <v......
  • 直播软件源码,java数据分页几种方式
    直播软件源码,java数据分页几种方式1.使用PageUtils Service: /**   *分页查询   *   *@paramparams查询条件   *@returnPageUtils   */  PageUtilsqueryPage(Map<String,Object>params);   ServiceImpl: Page<数据库对象实体>pa......
  • 直播平台制作,日期选择框设置只可以选中某几个特定日期
    直播平台制作,日期选择框设置只可以选中某几个特定日期判断当前日期是否存在于可选范围avaiableDateList,存在disabledDate返回false代表可选,不存在返回true不可选择 代码示例: <a-date-pickerformat="YYYY-MM-DD":disabled-date="disabledDate"/>disabledDate(current){le......
  • 在线直播源码,Dialog使用详情(中间弹框)
    在线直播源码,Dialog使用详情(中间弹框)第一步:应用程序入口设置当我们导入依赖后,在应用程序顶层把GetMaterialApp作为顶层,如下所示 import'package:flutter/material.dart';import'package:flutter_getx_example/DialogExample/DialogExample.dart';import'package:get/ge......
  • 直播系统源码,自动登录及记住密码实现
    直播系统源码,自动登录及记住密码实现分为两个activity,mainActivity是登录页面,homeActivity是登录成功页面。HomeActivity.java代码 publicclassHomeActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){  super.onCrea......
  • 直播app系统源码,Flutter中导航栏和状态栏设置成透明
    直播app系统源码,Flutter中导航栏和状态栏设置成透明一、Flutter透明状态栏设置 import'package:flutter/material.dart';//导入对应的文件import'package:flutter/services.dart';   voidmain(){ //配置透明的状态栏 SystemUiOverlayStylesystemUiOverlayStyle=......
  • RTMP流媒体服务器LiteCVR支持在iOS播放WebRTC低延时视频流
    视频监控设备是安防行业的细分专业领域,近年来,视频监控业务正在向其他领域加速渗透。众所周知,iOS系统支持HLS流,但是HLS流延时高,无法满足实时流的要求;而WebRTC播放延时低,因此,很多用户希望能在iOS系统上播放Webrtc视频流。针对用户的这一需求,LiteCVR平台灵活的视频能力,可以完全满足。......
  • Kotlin 协程Job 代替 Handler执行延时任务 带取消
    privatevalhandler=Handler(Looper.getMainLooper())varrunnable=Runnable{dismissProgressDialog()}......handler.postDelayed(runnable,(10*1000).toLong())......//取消任务handler.removeCallbacks(runnable)privatevarjob:Job?=null......job......
  • 直播商城系统源码,快速滑动条/快速滑块/快速滚动条标准实现
    直播商城系统源码,快速滑动条/快速滑块/快速滚动条标准实现 /* *Copyright2018TheAndroidOpenSourceProject * *LicensedundertheApacheLicense,Version2.0(the"License"); *youmaynotusethisfileexceptincompliancewiththeLicense. *Youmay......
  • 直播app系统源码,bootstrap5 text左对齐右对齐
    直播app系统源码,bootstrap5text左对齐右对齐在bootstrap4中text左/右对齐   <h1class="text-right">右对齐</h1>  <h1class="text-left">左对齐</h1>  <h1class="text-center">居中</h1> ​看了下官网在bootstrap5中就不起作用了换成t......