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

ops/2024/9/23 5:11:02/

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

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

当前的播放

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

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

定制的播放器实现

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

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

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


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()方法,你仅需要实现你的播放器声明可用的指令的方法。


http://www.ppmy.cn/ops/12723.html

相关文章

vue 实现懒加载

目录 什么是懒加载? 组件级懒加载 方法一:使用Webpack的代码分割能力 方法二:使用Vue异步组件 Vue 2 vue 3 图片懒加载 原理 方法一:lazyload 插件 方法二 :IntersectionObserve()API:Intersectio…

Redisson - 看门狗机制(Watch Dog)禁用方案

问题描述 Redis - Redisson tryLock 函数参数分析-CSDN博客 我们在这篇文章有提到过看门狗机制,其实有时候我们不想要看门狗机制的时候,如何禁用呢?!因为有时候不想续期,需要实时性比较高的业务,但是看门…

前端 -- Flex布局

Flex布局(Flexible Box Layout)是一种CSS布局方式,旨在提供一种更有效的方式来布局、对齐和分配容器内项目的空间,即使它们的大小未知或是动态变化的。Flex布局能够让容器的子元素能够灵活地增长和缩小以最佳地填充可用空间。 Fl…

oracle操作系统OS认证和密码文件认证

1 说明 1.1 常见认证方式 Oracle登录认证方式主要涉及到如何验证用户身份以访问数据库。Oracle数据库提供了多种认证机制来确保数据的安全性和访问控制,每种方式都有其特定的使用场景和安全性考虑。以下是Oracle中常见的登录认证方式: 1、基于操作系统…

数据分析-pandas1

数据分析-pandas Pandas 是 Wes McKinney 在2008年开发的一个强大的分析结构化数据的工具集。Pandas 以 NumPy 为基础(实现数据存储和运算),提供了专门用于数据分析的类型、方法和函数,对数据分析和数据挖掘提供了很好的支持&…

3.SpringCloud版本

1.SpringCloud与SpringBoot之间版本对应 2.服务拆分的注意事项 1.不同微服务,不要重复开发相同业务。 2.微服务的数据独立,每个微服务都有自己独立的数据库,不要访问其他微服务的数据库。 3.微服务可以将自己的的业务暴露为接口&#xff…

考研党打印资料怎么使用云打印服务?

对于准备考研的同学们来说,在备考的时候需要准备许多资料,这些资料的打印费用成为了考研党的巨额支出。那么在生活费有限的情况下,考研党打印资料最好是选择云打印服务,因为易绘创云打印服务低至5分钱/页还包邮。那么考研党打印资…

【Java】怎么处理Oracle的Clob类型字段

Oracle 数据库中的 CLOB(Character Large Object)字段类型用于存储大量文本数据,例如长文本、大型文档或 XML 数据等。 这个类型在 Java 中,可以使用 java.sql.Clob 类型来接收 Oracle 数据库中的 CLOB(Character Lar…