安卓手机APP开发__媒体开发部分__播放器的接口

安卓手机APP开发__媒体开发部分__播放器的接口

目录

概述

组件之间的共同的接口

媒体3的播放的架构

播放器的状态

对改变的监听

当前的播放

定制的播放器实现


概述

一个播放器是你的APP中完成媒体项的播放的组件.

媒体3的播放器接口提供了一个关于播放器处理的功能的总结.

这包括如下的内容:

对于播放的控制,例如播放,暂停,查找与查询当前的媒体的属性

例如播放位置.

管理一个播放列表/媒体项的队列

配置播放属性,例如缓冲,重复,速度,和音量.

向屏幕上渲染视频

媒体3也提供了一个播放器的接口的实现,叫做ExoPlayer.

组件之间的共同的接口

在媒体3中的一些组件实现了播放器的接口.例如:

组件 描述与行为的解释
ExoPlayer 这是播放器接口的默认的实现
MediaController 与媒体会话的交互来发送播放的命令.如果你的播放器与在一个服务中的媒体会话独立于活动和片段, 你能让你的媒体控制器作为播放器.通过媒体会话让你的播放和播放列表的方法调用发给播放器.
MediaBrowser 除了媒体控制器提供的功能,和一个媒体库会话的交互,来浏览可用的媒体内容.
ForwardingPlayer 把方法调用转给另一个播放器的播放器实现.使用这个类定制化特别的方法.
SimpleBasePlayer 把方法的实现变得最小的播放器的实现.当你要使用一个连接媒体会话的定制化的播放器时很有用.
CastPlayer 和一个广播接收器的APP通信的播放器实现.它的行为依赖于广播的会话.
[播放器的列表]

媒体3的播放的架构

如果你和播放器通信,你应该直接调用它的方法来发播放的指令.

你能在你的播放中加上广告,通过实现一个媒体会话,给外部的源

授权它进行播放控制.这些外部的源实现了一个媒体控制器,它的功能是

连接一个媒体会话,和发出播放指令的请求.

当在后台播放媒体时,你需要保持你的媒体会话和有一个媒体会话服务

和媒体库服务的播放器作为一个前台的服务来运行.如果你这么做,你能

让你的播放器与你的APP中的活动独立出来.你在使用一个媒体控制器时

这是必要的.

播放器的状态

一个媒体播放器的状态实现了播放器的接口,包括了4类主要的信息:

第一类:播放状态

使用getPlaybackState()来检索状态.

状态的值由接口来定义,有STATE_IDLE, STATE_BUFFERING, STATE_READY, and STATE_ENDED.

第二类:媒体项的播放列表

播放的媒体项的实现的序列

使用getCurrentTimeline()来检索时间线

播放器实例能提供播放列表的方法,例如加媒体项,删除媒体项,得到当前媒体项.

第三类:播放/暂停属性,例如:

playWhenReady:当可能时或者是保持暂停时,显示用户是否要媒体播放

Playback suppression reason:显示播放挂起的原因

isPlaying:显示播放是否正在播放,如果播放状态为STATE_READY,playWhenReady为真,

并且没有播放挂起时,这个值为真.

第四类:播放位置包括:

Current media item index:在播放列表中的当前媒体项的索引

isPlayingAd: 显示是否正在播放一个插入的广告

Current playback position:当前的媒体项或者是插入的广告的当前播放位置.

此外,播放器接口允许读取可用的轨道,媒体元数据,播放速度,音量和播放的其它的附加的属性.

注意的是播放器实例没有必要支持接口的所有的特性.

对改变的监听

使用一个Player.Listener来监听一个播放器的改变.

Kotlin

Kotlin 复制代码
val handler = Handler(Looper.getMainLooper())
fun checkPlaybackPosition(delayMs: Long): Boolean =
  handler.postDelayed(
    {
      val currentPosition = player.currentPosition
      // Update UI based on currentPosition
      checkPlaybackPosition(delayMs)
    },
    delayMs)

当前的播放

播放器的接口提供了操纵播放的状态和控制方面的很多的方法.

基本的播放控制有播放,暂停,准备和停止.

播放列表的方法有加媒体项和删除媒体项.

查找当前的媒体项或者是位置.

设置重复模式和乱序模式.

刷新轨道选择的信息

设置播放速度.

定制的播放器实现

为了创建一个定制的播放器,你能扩展一个媒体3中的简单播放器.这个类提供了一个基本的实现.

它把你需要实现的方法的数量减少到了最小的程度.

通过覆盖getState()方法来开始,这个方法包括:

可用的指令集

播放属性例如当播放状态为STATE_READY时,是否开始播放。当前的播放的媒体项的索引,当前

项的播放位置。

Kotlin

Kotlin 复制代码
class CustomPlayer : SimpleBasePlayer(looper) {
  override fun getState(): State {
    return State.Builder()
      .setAvailableCommands(...) // Set which playback commands the player can handle
      // Configure additional playback properties
      .setPlayWhenReady(true, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST)
      .setCurrentMediaItemIndex(0)
      .setContentPositionMs(0)
      .build()
  }
}

简单播放器强调了状态值的有效组合的状态。它也能处理监听器和通知状态改变的监听器。

如果你需要手工地触发一个状态上的刷新,就调用invalidateState().

除了getState()方法,你仅需要实现你的播放器声明可用的指令的方法。

相关推荐
图王大胜2 小时前
Android Framework AMS(01)AMS启动及相关初始化1-4
android·framework·ams·systemserver
工程师老罗3 小时前
Android Button “No speakable text present” 问题解决
android
小雨cc5566ru5 小时前
hbuilderx+uniapp+Android健身房管理系统 微信小程序z488g
android·微信小程序·uni-app
小雨cc5566ru5 小时前
微信小程序hbuilderx+uniapp+Android 新农村综合风貌旅游展示平台
android·微信小程序·uni-app
小雨cc5566ru6 小时前
小程序 uniapp+Android+hbuilderx体育场地预约管理系统的设计与实现
android·小程序·uni-app
奇客软件6 小时前
如何从相机的记忆棒(存储卡)中恢复丢失照片
深度学习·数码相机·ios·智能手机·电脑·笔记本电脑·iphone
佛系小嘟嘟7 小时前
Android-由switch-case和view.getId()引起的bug:错误:需要常量表达式 的解决办法
android·bug
勿问东西7 小时前
【Android】事件
android
绚烂的萤火9 小时前
移动应用的界面配置-手机银行APP
智能手机·android-studio·布局方式