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

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

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.mfbz.cn/a/568230.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于TSM模块的打架斗殴识别技术

目 录 1 引言.... 4 1.1 研究背景与意义.... 4 1.2 研究现状综述.... 5 1.3 研究内容.... 6 1.3.1 图像预处理的优化.... 6 1.3.2 TSM模块的应用.... 6 1.3.3 视频分类的设计与实现.... 6 2 关键技术与方法.... 8 2.1 TSM算法与模型选择.... 8 2.1.1 TSM算法原理.... 8 2.1.2 …

深度学习-数据预处理

目录 创建一个人工数据集处理缺失的数据插入对inputs中的类别值或离散值,将NaN视为一个类别对inputs和outputs中的数值类型转换为张量格式 创建一个人工数据集 import os import pandas as pd os.makedirs(os.path.join(.., data), exist_okTrue) data_file os.p…

基于Vue+ElementPlus自定义带历史记录的搜索框组件

前言 基于Vue2.5ElementPlus实现的一个自定义带历史记录的搜索框组件 效果如图: 基本样式: 获取焦点后: 这里的历史记录默认最大存储10条,同时右侧的清空按钮可以清空所有历史记录。 同时搜索记录也支持点击搜索,按…

.NET(C#)连接达梦数据库GUID字段被自动加横线的修复方法

因信创的原因项目需要兼容达梦数据库,今天遇到个比较坑爹的问题,简单记录下解决方案。 数据库存的是这样: 通过DataAdapter.Fill拿出来以后变成了这样 纳尼?谁让你加上这些横杠的?(掀桌)导致了…

100个实用电气知识

在当今社会,电力作为日常生活和工作中不可或缺的能源,扮演着越来越重要的角色。为了更好地利用电力资源,了解电气知识成为了越来越多人的需求。在电气领域,有很多实用的知识,这些知识对于从事电气工作的人来说是非常重…

Linux系统安全:从面临的攻击和风险到安全加固、安全维护策略(文末有福利)

1. Linux面临的攻击与风险 1.1. Linux系统架构 Linux系统架构解读: 用户之间隔离内核态与用户态之间隔离用户进程一般以低权限用户运行系统服务一般以特权服务运行用户态通过系统调用进入内核态内核对系统资源进行管理和分配 1.2. Linux系统常见安全威胁 1.2.1.…

OSPF认证方式,ISIS简介,ISIS路由器类型

OSPF:转发,泛洪,丢弃

Docker搭建代码托管Gitlab

文章目录 一、简介二、Docker部署三、管理员使用四、用户使用五、用户客户端 一、简介 GitLab是一个基于Git的代码托管和协作平台,类似于GitHub。 它提供了一个完整的工具集,包括代码仓库管理、问题跟踪、CI/CD集成、代码审查等功能。 GitLab的开源版本…

Go语言并发赋值的安全性

struct并发赋值 type Test struct {X intY int }func main() {var g Testfor i : 0; i < 1000000; i {var wg sync.WaitGroup// 协程 1wg.Add(1)go func() {defer wg.Done()g Test{1, 2}}()// 协程 2wg.Add(1)go func() {defer wg.Done()g Test{3, 4}}()wg.Wait()// 赋值…

2024新算法角蜥优化算法(HLOA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介&#xff1a; 2024新算法角蜥优化算法&#xff08;HLOA&#xff09;和经典灰狼优化器&#xff08;GWO&#xff09;进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗&#xff0c;并使无人机能够适应复杂…

国内首个48小时大模型极限挑战赛落幕,四位“天才程序员”共同夺冠

4月21日晚&#xff0c;第四届ATEC科技精英赛&#xff08;ATEC2023&#xff09;线下赛落幕。本届赛事以大模型为技术基座&#xff0c;围绕“科技助老”命题&#xff0c;是国内首个基于真实场景的大模型全链路应用竞赛。ATEC2023线下赛采用48小时极限挑战的形式&#xff0c;来自东…

Ts支持哪些类型和类型运算(上)

目录 1、元组 2、接口&#xff08;interface&#xff09; 3、枚举&#xff08;Enum&#xff09; 4、字面量类型 5、keyof 6、in keyof 7、类型的装饰 静态类型系统 就是把 类型检查从运行时提前到了编译时&#xff0c;所以ts类型系统中的许多类型与js并无区别 例如&am…

概率图模型在机器学习中的应用:贝叶斯网络与马尔可夫随机场

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

什么是etcd etcd是基于Go语言开发的一个开源且高可用的分布式key-value存储系统&#xff0c;我们可以在上面实现配置共享与服务的注册与发现。 和它比较相似的还有我们之间所提到的Zookeeper以及consul.(注:后面我们学习微服务的时候etcd和consul会有广泛的使用) etcd有以下几…

网络中其他协议

目录 DNS协议 域名简介 ICMP协议 ICMP功能 ICMP协议格式 ping命令 NAT技术 NATP NAT技术的限制 代理服务器 DNS协议 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 为什么有这个协…

W801学习笔记十二:掌机进阶V3版本之驱动(PSRAM/SD卡)

本次升级添加了两个模块&#xff0c;现在要把他们驱动起来。 一&#xff1a;PSRAM 使用SDK自带的驱动&#xff0c;我们只需要写一个初始化函数&#xff0c;并在其中添加一些自检代码。 void psram_heap_init(){wm_psram_config(0);//实际使用的psram管脚选择0或者1&#xff…

基于Linux系统命令行安装KingbaseES数据库

人大金仓通用性数据库&#xff08;Kingbase&#xff09;下载网址&#xff1a;人大金仓-成为世界卓越的数据库产品与服务提供商 选择“软件版本-数据库”&#xff0c;筛选条件Linux、完整版。找到需要的版本&#xff0c;点击下载。我下载的是KingbaseES_V008R006C008B0014_Lin6…

CyclicBarrier(循环屏障)源码解读与使用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 什么是CyclicBarrier&#xff1f; 3. CyclicBarrier与CountDownL…

共享单车(一):项目配置

配置文件 对于很多程序中要用的参数如果是可变的&#xff0c;那么最好的处理方式就是通过main函数参数传递&#xff0c;或者从别的地方去获取&#xff0c;这其中之一就是配置文件&#xff0c;但是在一个成熟和架构完善的系统&#xff0c;一般都会做到自动配置&#xff0c;自动…

【刷题】前缀和入门

送给大家一句话&#xff1a; 既然已经做出了选择&#xff0c;最好还是先假定自己是对的。焦虑未来和后悔过去&#xff0c;只经历一个就够了。 – 张寒寺 《不正常人类症候群》 ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ…
最新文章