ExoPlayer Library 概述

ExoPlayer是运行在YouTube app Android版本上的视频播放器

ExoPlayer是构建在Android低水平媒体API之上的一个应用层媒体播放器。和Android内置的媒体播放器相比,ExoPlayer有许多优点。ExoPlayer支持内置的媒体播放器支持的所有格式外加自适应格式DASH和SmoothStreaming。ExoPlayer可以被高度定制和扩展以适应不同的使用场景。

ExoPlayer库的核心是ExoPlayer接口。ExoPlayer公开了传统的高水平媒体播放器的功能,例如媒体缓冲,播放,暂停和快进功能。ExoPlayer实现旨在对正在播放的媒体类型,存储方式和位置以及渲染方式做出一些假设(因此几乎没有限制)。ExoPlayer没有直接实现媒体文件的加载和渲染,而是把这些工作委托给了在创建播放器或者播放器准备好播放的时候注入的组件。所有ExoPlayer实现的通用组件是:

MediaSource:媒体资源,用于定义要播放的媒体,加载媒体,以及从哪里加载媒体。简单的说,MediaSource就是代表我们要播放的媒体文件,可以是本地资源,可以是网络资源。MediaSource在播放开始的时候,通过ExoPlayer.prepare方法注入。Renderer:渲染器,用于渲染媒体文件。当创建播放器的时候,Renderers被注入。TrackSelector:轨道选择器,用于选择MediaSource提供的轨道(tracks),供每个可用的渲染器使用。LoadControl:用于控制MediaSource何时缓冲更多的媒体资源以及缓冲多少媒体资源。LoadControl在创建播放器的时候被注入。

ExoPlayer库提供了在普通使用场景下上述组件的默认实现。ExoPlayer可以使用这些默认的组件,也可以使用自定义组件。例如可以注入一个自定义的LoadControl用来改变播放器的缓存策略,或者可以注入一个自定义渲染器以使用Android本身不支持的视频解码器。

优点和缺点

优点

支持HTTP上的动态自适应流DASH和SmoothStreaming。更多详情请参看Supported formats。支持高级的HLS特点,例如正确的处理#EXT-X-DISCONTINUITY标签。能够无缝的合并,串联,循环播放媒体文件。能够被高度扩展和定制,以适用不同的场景。

缺点

在某些设备上播放音频,ExoPlayer可能会比MediaPlayer消耗更多的电量。使用 添加依赖implementation 'com.google.android.exoplayer:exoplayer:2.X.X'

为了省事,我们依赖了整个ExoPlayer库。你也可以只依赖你真正需要的库。例如果你要播放DASH类型的媒体资源,你可以只依赖Core,DASH,UI这三个库。

implementation 'com.google.android.exoplayer:exoplayer-core:2.X.X' implementation 'com.google.android.exoplayer:exoplayer-dash:2.X.X' implementation 'com.google.android.exoplayer:exoplayer-ui:2.X.X'

整个ExoPlayer库包括5个子库,依赖了整个ExoPlayer库和依赖5个子库是等效的。

exoplayer-core:核心功能 (必要)exoplayer-dash:支持DASH内容exoplayer-hls:支持HLS内容exoplayer-smoothstreaming:支持SmoothStreaming内容exoplayer-ui:用于ExoPlayer的UI组件和相关的资源。在布局文件中加入PlayerView com.google.android.exoplayer2.ui.playerview