自学内容网 自学内容网

ExoPlayer架构详解与源码分析(16)——LoadControl

系列文章目录

ExoPlayer架构详解与源码分析(1)——前言
ExoPlayer架构详解与源码分析(2)——Player
ExoPlayer架构详解与源码分析(3)——Timeline
ExoPlayer架构详解与源码分析(4)——整体架构
ExoPlayer架构详解与源码分析(5)——MediaSource
ExoPlayer架构详解与源码分析(6)——MediaPeriod
ExoPlayer架构详解与源码分析(7)——SampleQueue
ExoPlayer架构详解与源码分析(8)——Loader
ExoPlayer架构详解与源码分析(9)——TsExtractor
ExoPlayer架构详解与源码分析(10)——H264Reader
ExoPlayer架构详解与源码分析(11)——DataSource
ExoPlayer架构详解与源码分析(12)——Cache
ExoPlayer架构详解与源码分析(13)——TeeDataSource和CacheDataSource
ExoPlayer架构详解与源码分析(14)——ProgressiveMediaPeriod
ExoPlayer架构详解与源码分析(15)——Renderer
ExoPlayer架构详解与源码分析(16)——LoadControl
ExoPlayer架构详解与源码分析(17)——TrackSelector



前言

本篇来了解下四大组件中的LoadControl,这个组件和其他几个比起来算是比较小巧的了,简略过下

LoadControl

播放前媒体数据加载控制

  • onPrepared 当准备完成时被播放器调用
  • onTracksSelected 选择轨道时调用
  • onStopped 播放停止时调用
  • onReleased 播放释放时调用
  • getAllocator 返回一个Allocator,用于媒体数据的缓存管理
  • getBackBufferDurationUs 返回在当前播放位置之前保留在缓冲区中的媒体持续时间,用以进行快速向后搜索。
    注意:如果retainBackBufferFromKeyframe()=false,则只有当后台缓冲区包含查找位置之前的关键帧时,后台缓冲区中的查找才会很快。
  • retainBackBufferFromKeyframe 返回是否应保留当前播放位置减去getBackBufferDurationUs()之前的关键帧中的媒体,而不是保留该位置之前或该位置处的任何样本。返回 true 将导致后台缓冲区大小取决于正在播放的媒体中关键帧的间距。不建议返回 true
  • shouldContinueLoading 由播放器调用以确定是否应继续加载源。如果此方法返回 true,则将继续加载最近一次onTracksSelected调用中标识的MediaPeriod 。
  • shouldStartPlayback 播放器在加载源、尚未开始播放且具有开始播放所需的最小数据量时调用。返回的值决定是否真正开始播放。负载控制可以选择返回false直到满足某些条件(例如,缓冲了一定量的媒体)。

可以看出LoadControl在播放器的关键时候进行了调用,播放前决定是否可以播放,加载过程中决定是否继续加载数据,下面看它的默认实现类DefaultLoadControl

DefaultLoadControl

  private final DefaultAllocator allocator;//缓存分配器,默认初始化出了一个单个Allocation块大小为64KB的DefaultAllocator 
  private final long minBufferUs;//最小缓存的时长,默认值是50秒
  private final long maxBufferUs;//最大缓存的时长,默认值是50秒
  private final long bufferForPlaybackUs;//开始播放前至少要缓存的时长,默认值2.5秒
  private final long bufferForPlaybackAfterRebufferUs;//重新缓存时至少需要的缓冲时长,默认值5秒
  private final int targetBufferBytesOverwrite;//初始设置的缓存大小,默认值LENGTH_UNSET=-1
  private final boolean prioritizeTimeOverSizeThresholds;//缓存时间的优先级是否高于缓存大小,默认值fasle,就是默认优先使用缓存的大小
  private final long backBufferDurationUs;//已缓存数据的时长,默认值0秒
  private final boolean retainBackBufferFr

原文地址:https://blog.csdn.net/blovecat/article/details/132498320

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!