• 安卓手机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

    1. val handler = Handler(Looper.getMainLooper())
    2. fun checkPlaybackPosition(delayMs: Long): Boolean =
    3. handler.postDelayed(
    4. {
    5. val currentPosition = player.currentPosition
    6. // Update UI based on currentPosition
    7. checkPlaybackPosition(delayMs)
    8. },
    9. delayMs)

    当前的播放

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

    基本的播放控制有播放,暂停,准备和停止.
    播放列表的方法有加媒体项和删除媒体项.
    查找当前的媒体项或者是位置.
    设置重复模式和乱序模式.
    刷新轨道选择的信息
    设置播放速度.

    定制的播放器实现

    为了创建一个定制的播放器,你能扩展一个媒体3中的简单播放器.这个类提供了一个基本的实现.
    它把你需要实现的方法的数量减少到了最小的程度.

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

    可用的指令集
    播放属性例如当播放状态为STATE_READY时,是否开始播放。当前的播放的媒体项的索引,当前
    项的播放位置。


    Kotlin

    1. class CustomPlayer : SimpleBasePlayer(looper) {
    2. override fun getState(): State {
    3. return State.Builder()
    4. .setAvailableCommands(...) // Set which playback commands the player can handle
    5. // Configure additional playback properties
    6. .setPlayWhenReady(true, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST)
    7. .setCurrentMediaItemIndex(0)
    8. .setContentPositionMs(0)
    9. .build()
    10. }
    11. }

    简单播放器强调了状态值的有效组合的状态。它也能处理监听器和通知状态改变的监听器。
    如果你需要手工地触发一个状态上的刷新,就调用invalidateState().

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

  • 相关阅读:
    【python】常见的正则表达式用法;匹配字符串
    数字孪生与GIS的完美融合
    洛谷P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
    SPA(单页应用)首屏加载速度慢怎么解决?
    深入剖析Java框架源码的设计之重载与重写、构造方法的区别详解
    矩阵乘积的迹对矩阵求导
    【安装OpenFPGA】经验分享
    【PyTorch深度学习项目实战100例】—— 基于Conv3D实现三维立体MNIST数据集分类 | 第54例
    程序调试技巧
    vue2使用change事件监听不了回车事件的问题
  • 原文地址:https://blog.csdn.net/gggwfn1982/article/details/138140520