概述
ExoPlayer构建在Android低水平媒体API之上的一个应用层媒体播放器。支持内置播放器的所有格式外加自适应格式DASH和SmoothStreaming。所有它可以高度定制和扩展。
使用
1.添加依赖
在项目的根目录下 打开 build.gradle 中添加Google和JCenter库。
创建android 项目时 AndroidStudio 会自动添加,在这里提一下。
repositories {
google()
jcenter()
}
- 在 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
- TheMediaSessionCompat
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给定窗口的索引。通常需要异步加载图标。 |
引用: