安卓手机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 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.mzph.cn/news/827704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一招搞定“找不到xinput1_3.dll,无法继续执行代码”问题

在我们日常使用电脑进行各类工作的过程中,特别是在运行一些关键性软件以完成特定任务时,电脑屏幕上突然弹出一条醒目的错误提示信息:“由于找不到xinput1_3.dll,无法继续执行代码”。这个错误通常发生在使用DirectInput库时,而xin…

BFS解决FloodFill算法:(Leetcode:733. 图像渲染)

题目链接:733. 图像渲染 - 力扣(LeetCode) 使用广度优先遍历算法解决该问题: 从初始位置开始搜索,初始位置符合条件就入栈,并修改初始位置值。初始位置出栈。 再从初始位置开始广度优先搜索(…

阿赵UE学习笔记——30、HUD简单介绍

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎,这次来学习一下HUD的基础使用。 一、 什么是HUD HUD(Head-Up Display),也就是俗称的抬头显示。很多其他领域里面有用到这个术语,比如开车的朋友可能会接触过&#xf…

【Camera Sensor Driver笔记】一、Sensor基本概念

时钟 sensor clock sensor的输入时钟 MCLK 输出时钟: 1. VTPixelClock:会影响sensor内部的帧率、曝光 VTPixelClock(vt_clk)Video Timing Clock, From sensor PLL VTPixelClock Framelengthlines x LinelengthPixelClock x FPS Framelengthlines L…

页面加载事件

2.1窗口加载事件 1.window.οnlοadfuction(){} 或者 window.addEventListerner(‘load’,function(){}) doucument.addEventListner(DOMContentLoaded,fuction(){})这个反应更快些

是德软件89600 RFID使用笔记

文章目录 1、进入RFID软件:2、RFID软件解调设置项3、如何查看一段指令数据 本文是日常工作的笔记分享。 lauch VSA(矢量频谱分析)后会出现以下界面: 当然这是因为频谱仪的输入有信号才显示如下: 否则就显示频谱仪的噪…

初识C++ · 类和对象(中)(2)

前言:上篇文章已经介绍了6个默认成员函数中的3个函数,分别是构造函数,析构函数,拷贝构造函数,本文介绍的是后三个,赋值运算符重载,const成员函数,取地址操纵符重载。 目录​​​​​…

通过使用XShell工具、Nginx环境实现服务器项目构建与发布

前言: 在信息化和数字化的今天,网站和应用的构建与发布已成为企业发展的重要一环。为了确保项目的顺利上线和稳定运行,选择合适的工具和环境至关重要。本文将详细介绍如何通过XShell工具以及Nginx环境来实现服务器项目的构建与发布&#xff0…

datax介绍和用法

Datax 简介 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 DataX本身作为数据同步框架&…

智慧图书馆为什么用rfid电子标签而不是磁条

智慧图书馆一般都会使用RFID技术,而不是磁条。以下是几个原因: 1. 效率更高:RFID技术可以实现非接触式读取,图书馆工作人员可以同时读取多本书的信息,大大提高了借还书的效率。 2. 数据量更大:RFID标签可以…

大模型-入门小知识

大模型是什么 大量参数(上亿)深度学习模型 人工只能包含机器学习,深度学习,深度学习包括大模型 单个神经元的计算模型: 大模型是怎么训练的 之前是算法(神经网络)----> 训练(门槛降低&…

LlamaIndex代理的逐步执行框架,包括代理运行器和代理工作者

原文地址:llamaindex-agent-step-wise-execution-framework-with-agent-runners-agent-workers 2024 年 4 月 15 日 LlamaIndex lower-level 代理 API 提供了一系列功能,超出了仅从头到尾执行用户查询的范围。 介绍 LlamaIndex 提供了一个全面的代理 API…

设计模式- 中介者模式(Mediator)

1. 概念 中介者模式(Mediator Pattern),是一种对象行为型模式。该模式的主要目的是定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合变得松散,并且可以独立地改变它们之间的交互。 2. 原理结构图 抽…

Python Selenium无法打开Chrome浏览器处理自定义浏览器路径

问题 在使用Python Selenium控制Chrome浏览器操作的过程中,由于安装的Chrome浏览器的版本找不到对应版本的驱动chromedriver.exe文件,下载了小几个版本号的驱动软件。发现运行下面的代码是无法正常使用的: from selenium import webdriver …

FPGA“题目周周练”活动来啦!

Hi,各位编程精英er~ 不知道大家的FPGA学习之旅到达哪一个阶段了呢?又在这个过程中遇到了哪些困惑? 作为一门高度专业化且充满挑战的技术,FPGA的学习是一场不断思考、认知、持续深化的过程。在这个过程中,思维的敏捷和…

【vue2】实现微信截图(复制图片)在项目内可粘贴

需求 后台管理在上传图片地方需要将复制的图片粘贴上传 一、添加事件 在原有上传组件的基础上添加 paste事件 二、方法 onPaste(e) {const items (e.clipboardData || window.clipboardData).items;let blob null;for (let i 0; i < items.length; i) {if (items[i].ty…

034——从GUI->Client->Server->driver实现读写EEPROM

目录 1、修改GUI 2、修改client 3、 修改server 4、 修改driver_handele 5、 测试和提交 1、修改GUI 之前叫IIC&#xff0c;我们其实是借助EEPROM来测试IIC是不是好用所以名称改一改 长得有点奇怪 这样虽然一样长了但是还是很奇怪。 就先这样吧 layout_l [[tool.name(N…

100个实用电气知识

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

二叉树oj题(2)

1.二叉树的最近公共祖先 解题思路&#xff1a;方法一&#xff1a; 1.先判断p或者q 是不是 root当中的一个 2.左子树当中递归査找p或者q 3.右子树当中递归查找p或者q 如何查找: root 的 left 和 right 都不为空 ->root root的 left 为空 right 不为空->right这一侧找…

出海不出局 | 小游戏引爆高线市场,新竞争态势下的应用出海攻略

出海小游戏&#xff0c;出息了&#xff01; 根据 Sensor Tower 近期发布的“2024 年 3 月中国手游收入 TOP30”榜单&#xff0c;出海小游戏在榜单中成了亮眼的存在。 其中&#xff0c;《菇勇者传说》3 月海外收入环比增长 63%&#xff0c;斩获出海手游收入增长冠军&#xff0c…