ExoPlayer2 Google依赖库


概述

ExoPlayer构建在Android低水平媒体API之上的一个应用层媒体播放器。支持内置播放器的所有格式外加自适应格式DASH和SmoothStreaming。所有它可以高度定制和扩展。

使用

1.添加依赖

在项目的根目录下 打开 build.gradle 中添加Google和JCenter库。

创建android 项目时 AndroidStudio 会自动添加,在这里提一下。

repositories {
    google()
    jcenter()
}
  1. 在 app module 中添加依赖项
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'

2.x.x替换为首选的最新版本(ExoPlayer)

作为完整库的代替方案,可以根据实际需要的库模块。例如,以下内容对Core,DASH和UI库模块的依赖关系,这可能时播放DASH内容的应用程序所需要的。

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-core:核心功能(必须)。
  • exoplayer-dash:支持DASH内容。
  • exoplayer-hls:支持HLS内容。
  • exoplayer-smoothstraming:支持SmoothStreaming内容。
  • exoplayer-ui:与ExoPlayer一起使用的UI组件和资源。

更多的扩展模块

3.Java8

在 app 目录下添加 一下内容供所有文件支持Java8

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

控件

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/playerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

DOC

AudioAttributes.Builder() 类

用于音频回放的属性,用于配置平台下的AudioTrack。

如果你要设置音频属性,需要创建一个 AudioAttributes实例。

  • setContentText(int contentType)

设置描述音频信号内容类型的属性。如语言或音乐。

  • setUsage(int contentType)

设置描述音频信号用途的属性,例如报警或者铃声。

  • build()方法

构建器创建一个 AudioAttributes 实例。

C 类

定义标准库的常量

  • C.CONTENT_TYPE_MUSIC

C 类的常量用于

在你使用内容类型为音乐时使用的内容类型值。

  • C.USAGE_MEDIA

当使用媒体是使用这个值(如音乐或者电影原声带)

SimpleExoPlayer 类

实现组件的外部播放。

用SimpleExoPlayer.Build(context:Context)来实现

  • build()方法

构建器创建一个 SimpleExoPlayer实例。

  • setAudioAttributes()

设置音轨使用的音频回放属性。如果没有设置,将使用默认的属性。它们一般设置为媒体播放。设置回放音频属性期间可能回在输出中引入一个短间隙,因为音频轨道被重新创建。还生成一个新的音频会话id。如果音轨是由音轨选择器启用的,指定的音频属性将被忽视,但是当它播放时没有音轨那么指定属性将会被使用。

If the device is running a build before platform API version 21, audio attributes cannot be set directly on the underlying audio track. In this case, the usage will be mapped onto an equivalent stream type using Util.getStreamTypeForAudioUsage(int).

If audio focus should be handled, the AudioAttributes.usage must be C.USAGE_MEDIA or C.USAGE_GAME. Other usages will throw an IllegalArgumentException.

Parameters:

audioAttributes - The attributes to use for audio playback. 用于音频回放的属性

handleAudioFocus - True if the player should handle audio focus, false other wise. 用户处理音轨焦点时选择 true。

  • setHandleAudioBecomingNoisy(boolean handleAudioBecomingNoisy)

设置当前的音频从耳机重新定向到扬声器事,播放器是否应该暂停。

默认不启用。false

Sets whether the player should pause automatically when audio is rerouted from a headset to device speakers.

Parameters:

handleAudioBecomingNoisy - Whether the player should pause automatically when audio is rerouted from a headset to device speakers.

方法

返回值类型 方法名 描述
void setPlayWhenReady(boolean playWhenReady) playWhenReady:准备好后时候播放。如果播放器已处于就绪状态,则将暂停改为播放。

DefaultDataSourceFactory 类

创建工厂,将非文件的数据委托到 DetaultHttpDataSources。

Factory that produces DefaultDataSource instances that delegate to DefaultHttpDataSources for non-file/asset/content URIs.

  • DefaultDataSourceFactory(Context context,String userAgent)

创建 DetaultDataSourceFactory 类实例

Parameters:

context - A context.

userAgent - The User-Agent string that should be used. 使用用户代理

  • Util.getUserAgent(Context context,String applicationName)

根据给定的应用程序名词和库版本返回用户代理的字符串。

Returns a user agent string based on the given application name and the library version.

  • Parameters:

    context - A valid context of the calling application. 当前 app 上下文

    applicationName - String that will be prefix’ed to the generated user agent.

MediaSessionConnector 类

继承关系

介绍

Connects a MediaSessionCompat to a Player.

负责连接到 MediaSessionCompat 类

public MediaSessionConnector(android.support.v4.media.session.MediaSessionCompat mediaSession)

mediaSession - The MediaSessionCompat to connect to.

用来连接到 MediaSessionCompat

setPlayer

 public void setPlayer(@Nullable Player player)

Sets the player to be connected to the media session. Must be called on the same thread that is used to access the player.

将播放器连接到媒体。主要只能在一条线程上。

修饰符 方法 描述
void setQueueNavigator(MediaSessionConnector.QueueNavigator queueNavigator) 设置处理队列导航的操作。queueNavigator:队列编辑器。

MediaSessionConnector.PlaybackPreparer 接口

准备播放操作的接口

抽象方法

返回类型 方法名字 参数 描述 返回
long getSupportedPrepareActions() 返回支持的媒体操作常量 媒体常量
void onPrepare(boolean playWhenReady) 准备好后是否播放 准备完成时调用
void onPrepareFromMediaId ( String mediaId, boolean playWhenReady, @Nullable Bundle extras) mediaId:媒体项的Id,playWhenReady:准备好后是否播放,extras:媒体的控制器可为null 用以播放特定的媒体
void onPrepareFromSearch(String query, boolean playWhenReady, @Nullable Bundle extras) query:搜索,playWhenReady:准备好后是否播放,extras:媒体控制器可为null 搜索特定音乐 void
void onPrepareFromUri( Uri uri, boolean playWhenReady, @Nullable Bundle extras) uri:要播放的媒体项目,playWhenReady:准备完成后是否播放,extras:媒体控制器可为null 通过Uri处理特定媒体项目 void
void onCommand(String command,Bundle extras,ResultReceiver cb) command:命令名称,extras:命令的可选参数,cb,接收器命令发送到接收器,可为空 接口继承了 MediaSessionConnector.CommandReceiver 类中的方法。控制器发送自定义命令时调用 void

MediaDescriptionCompat 类

适合显示的媒体项目的一组简单元数据。 这可以使用Builder创建,也可以使用getDescription()从现有元数据中getDescription()

MediaDescriptionCompat.Builder

ConcatenatingMediaSource 类

ConcatenatingMediaSource允许播放期间动态的添加和删除MediaSource

PlayerNotificationManager 类

用来启动、更新和取消播放器状态的媒体样式通知的。

内部方法

返回值类型 方法 描述
void setPlaybackPreparer(PlaybackPreparer playbackPreparer) 准备播放器

嵌套类或方法

public static interface PlayerNotificationManager.NotificationListener

监听状态的监听器。

返回值类型 方法 描述
void onNotificationCancelled(int notificationId,boolean dismissedByUser) 通知被取消时调用
void onNotificationPosted(int notificationId, Notification notification,boolean ongoing) 发布通知后调用

public static PlayerNotificationManager createWithNotificationChannel

创建通知管理器并指定channelId和低优先级的通知通道channelName.

参数 描述
context-Context 上下文
channelId 通知Id
channelName 字符串资源标识符,用于用户可见的通知名称。最多40字符过多会被裁断。
channelDescription 用户对内容可见部分的描述。没有为0。
notificationId 通知的Id
mediaDescriptionAdapter 提供当前播放内容的适配器
notificationListener 开始和取消通知的监听器

public static interface PlayerNotificationManager.MediaDescriptionAdapter

提供当前播放内容的适配器

方法名 参数 返回值 描述
getCurrentContentTitle() com.google.android.exoplayer2.Player player CharSequence 获得当前内容标题
createCurrentContentIntent() com.google.android.exoplayer2.Player player PendingIntent 创建当前选项的意图
getCurrentContentText() com.google.android.exoplayer2.Player player CharSequence 获取当前内容文本
getCurrentLargeIcon() com.google.android.exoplayer2.Player player, PlayerNotificationManager.BitmapCallback callback Bitmap 获取当前大图标。当存在异步加载时可以返回占位符(或null),并且在 PlayerNotificationManager.BitmapCallback 加载后传递给它。由于在使用过程中适配器会多次被调用,因此图片由程序缓存,并尽可能在后续使用中同步返回。

Player 接口

定义媒体播放器界面的高级功能常量、接口类型等,例如播放、暂停、搜索等属性能力。

常量

修饰类型 常量 描述
static int STATE_READY 移动到指定位置准备播放

Player.EventListener 接口

检测播放器的状态。

抽象方法

返回类型 方法名 描述 参数
void onPlayerError(ExoPlaybackException error)。 发生错误时调用 error:错误参数。
void onPlayerStateChanged(boolean playWhenReady,int playbackState) 检测媒体的状态 playWhenReady:是否准备好。playbackState:播放的状态。

TimelineQueueNavigator 抽象类

抽象类用来实现 MediaSessionConnector.QueueNavigator 窗口的映射Player,Timeline媒体会话的队列。

修饰符 (构造)方法 描述
TimelineQueueNavigator(MediaSessionCompat mediaSession) 创建一个实例MediaSessionCompat。
MediaDescriptionCompat getMediaDescription(Player player,int windowIndex) 获得MediaDescriptionCompat给定窗口的索引。通常需要异步加载图标。

引用:

深入解读ExoPlayer 之 开发者指南全译-02 开始使用

DOC

Android API


文章作者: TheCara
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 TheCara !
 上一篇
Android Jetpack架构组件 Navigation 导航库 Android Jetpack架构组件 Navigation 导航库
做什么的?用于用户导航、进入或者退出应用中不同内容片段的交互。通过 Jetpack导航组件可帮助你实现导航,无论是简单的按钮点击,还是应用栏或抽屉式导航栏等复杂的模式,这个组件都可以应对。(简化了导航的实现) 将业务和视图分离。 优势 方便
2020-11-20
下一篇 
Glide Android图片加载库 Glide Android图片加载库
下载 添加依赖添加依赖 在 app 目录下打开 build.gradle // Glide implementation 'com.github.bumptech.glide:glide:4.11.0'
2020-11-12
  目录