HarmonyOS AVPlayer 音频播放器

news2025/7/18 20:39:32

 鸿蒙文档中心:使用AVPlayer播放视频(ArkTS)文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback

这张图描述的是 HarmonyOS AVPlayer 音频播放器的状态流转过程,展示了 AVPlayer 在不同状态之间的切换条件和关键操作。

1. 核心状态说明

图中展示了 AVPlayer 的 7 个核心状态

  1. idle(空闲):初始状态或调用 reset() 后的状态。
  2. initialized(初始化):设置播放源(如 fdSrcurl)后的状态。
  3. prepared(准备完成):调用 prepare() 成功后的状态。
  4. playing(播放中):调用 play() 后的状态。
  5. paused(暂停):调用 pause() 后的状态。
  6. completed(播放完成):音频自然播放结束后的状态。
  7. stopped(停止):调用 stop() 后的状态。

2. 状态流转详细过程

(1) idle → initialized
  • 触发条件:调用 AVPlayer.create() 创建播放器后,设置播放源(如 fdSrcurl)。

关键操作

const avPlayer = await media.createAVPlayer(); // 创建播放器(进入 idle)
avPlayer.fdSrc = { fd, offset, length };      // 设置播放源(进入 initialized)
(2) initialized → prepared
  • 触发条件:调用 prepare() 方法。

关键操作

  • typescript复制下载avPlayer.prepare(); // 准备播放(进入 prepared)
  • 备注:此时播放器已加载音频元数据(如时长),但还未开始播放。
(3) prepared → playing
  • 触发条件:调用 play() 方法。

关键操作

  • typescript复制下载avPlayer.play(); // 开始播放(进入 playing)
  • 备注:此时音频开始播放,timeUpdate 回调会持续更新进度。
(4) playing paused
  • 双向切换

playing → paused:调用 pause()

    • typescript复制下载avPlayer.pause(); // 暂停播放(进入 paused)

paused → playing:再次调用 play()

    • typescript复制下载avPlayer.play(); // 恢复播放(回到 playing)
(5) playing → completed
  • 触发条件:音频自然播放结束(无需手动调用)。
  • 关键行为
    • 播放器自动进入 completed 状态。
    • 触发 stateChange 回调,通知应用播放结束。
(6) completed → playing
  • 触发条件:调用 seek(0) + play()(如代码中的逻辑)。

关键操作

avPlayer.seek(0);    // 跳转到开头
avPlayer.play();     // 重新播放(回到 playing)
(7) 任何状态 → stopped
  • 触发条件:调用 stop() 方法。

关键操作

  • typescript复制下载avPlayer.stop(); // 停止播放(进入 stopped)
  • 备注:停止后需调用 reset()release() 清理资源。
(8) stopped → idle
  • 触发条件:调用 reset() 方法。

关键操作

  • typescript复制下载avPlayer.reset(); // 重置播放器(回到 idle)
  • 备注:此时可以重新设置播放源(fdSrc),开启新一轮播放。
(9) 终止状态:released
  • 触发条件:调用 release() 方法。

关键操作

  • typescript复制下载avPlayer.release(); // 释放播放器资源(不可逆)
  • 备注:释放后播放器不可再用,需重新创建实例。

3. 关键注意事项

  1. 错误处理
    • 任何状态都可能因错误跳转到 error 状态,需监听 on('error') 回调。
    • 典型处理方式是调用 reset() 回到 idle 状态。
  1. 进度控制
    • seek() 只能在 playingpausedcompleted 状态下调用。
    • 调用 seek() 后会触发 seekDone 回调。
  1. 资源释放
    • 页面退出时(aboutToDisappear)必须调用 release(),避免内存泄漏。
  1. 状态检查
    • 调用任何方法前应检查当前状态(如 avPlayer.state),避免非法操作。

总结

这张图清晰地描述了 AVPlayer 的生命周期状态驱动模型,开发者需要:

  1. 按顺序操作(如先 prepare()play())。
  2. 处理边界情况(如播放完成后的恢复)。
  3. 及时释放资源(避免内存泄漏)。

通过这张图,可以更好地理解代码中 avPlayer 的行为逻辑,确保播放功能稳定可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379671.html

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

相关文章

⭐️白嫖的阿里云认证⭐️ 第二弹【课时1:提示词(Prompt)技巧】for 「大模型Clouder认证:利用大模型提升内容生产能力」

「大模型Clouder认证:利用大模型提升内容生产能力」这个认证目前在阿里云认证中心还是免费的,简单几步就可以申请考试,有两次的免费考试机会。而且,这个课程中的内容对于所有普通用户来说都非常实用,课程整体长度也就3节课,非常快速就能学完。心动不如行动,赶紧开始吧!…

Filament引擎(一) ——渲染框架设计

filament是谷歌开源的一个基于物理渲染(PBR)的轻量级、高性能的实时渲染框架,其框架架构设计并不复杂,后端RHI的设计也比较简单。重点其实在于项目中材质、光照模型背后的方程式和理论,以及对它们的实现。相关的信息,可以参考官方…

c++从入门到精通(六)--特殊工具与技术-完结篇

文章目录 特殊工具与技术-完结篇控制内存分配运行时类型识别成员指针嵌套类局部类固有的不可抑制特性位域volatile限定符链接指示 extern "C" 特殊工具与技术-完结篇 控制内存分配 重载new和delete: ​ 如果应用程序希望控制内存分配的过程,…

MCP实战:在扣子空间用扣子工作流MCP,一句话生成儿童故事rap视频

扣子最近迎来重要更新,支持将扣子工作流一键发布成MCP,在扣子空间里使用。 这个功能非常有用,因为我有很多业务工作流是在扣子平台上做的,两者打通之后,就可以在扣子空间里直接通过对话方式调用扣子工作流了&#xff0…

SpringBoot基础项目搭建

资料链接:https://download.csdn.net/download/ly1h1/90855288?spm1001.2014.3001.5501 1.准备工作 1.1 安装IntelliJ IDEA 2023.3.4 (Ultimate Edition) 1.2 采用apache-maven-3.6.3 1.2.1 maven配置文件设置 1.2.2 IDEA配置maven 1.3 JDK采用17版本 2.手动创建…

【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架

最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用,Deer-Flow(Deep Exploration and Efficient Research Flow)作为字节跳动近期开源的重量级项目,正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…

前端获取用户的公网 IP 地址

可以使用免费的免费的公共服务网站 一:https://www.ipify.org/ 获取 JSON 格式的 IP 地址 // 旧地址不好使 // https://api.ipify.org/?formatjson // 新地址 https://api64.ipify.org/?formatjson 二:https://ipinfo.io/ https://ipinfo.io/ 三&a…

云电竞服务器 工作原理

云电竞服务器工作原理详解 一、核心架构原理 虚拟化资源池‌ 通过 ‌KVM/VMware‌ 等虚拟化技术将物理服务器(含NVIDIA GPU集群)抽象为可动态分配的算力资源池,每个用户独享独立虚拟机实例,实现硬件资源的按需分配与隔离运行。 …

【数据结构】线性表--队列

【数据结构】线性表--队列 一.什么是队列二.队列的实现1.队列结构定义:2.队列初始化函数:3.队列销毁函数:4.入队列函数(尾插):5.出队列函数(头删):6.取队头元素&#xff…

[Vue3]语法变动

Vue3的语法相对比Vue2有不少改变,这篇讲一下基础语法在Vue3里的形式。 创建Vue对象 在脚手架项目中,index.html等资源不再编写代码,只作为一个容器。所有的页面代码都在.vue相关文件中进行编写,由main.js引入各个.vue文件渲染出页…

Ubuntu服务器开启SNMP服务 监控系统配置指南 -优雅草星云智控简易化操作

Ubuntu服务器开启SNMP服务 & 监控系统配置指南 -优雅草星云智控简易化操作 一、Ubuntu服务器开启SNMP服务 步骤1:安装SNMP服务 sudo apt update sudo apt install snmp snmpd snmp-mibs-downloader -y 步骤2:配置SNMP(编辑配置文件&am…

linux本地部署ollama+deepseek过程

1.Tags ollama/ollama GitHub 选择一个版本下载,我下的是0.5.12 2.tar解压该文件 3.尝试启动ollama ollama serve 4.查看ollama的版本 ollama -v 5.创建一个系统用户 ollama,不允许登录 shell,拥有一个主目录,并且用…

从零开始实现大语言模型(十五):并行计算与分布式机器学习

1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程,以减少训练时间的方法。在工业界的训练大语言模型实践中,通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…

OpenCV进阶操作:指纹验证、识别

文章目录 前言一、指纹验证1、什么是指纹验证2、流程步骤 二、使用步骤(案例)三、指纹识别(案例)1、这是我们要识别的指纹库2、这是待识别的指纹图3、代码4、结果 总结 前言 指纹识别作为生物识别领域的核心技术之一,…

网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…

3D生成新突破:阶跃星辰Step1X-3D开源,可控性大幅提升

Step1X-3D 是由 StepFun 联合 LightIllusions 推出的新一代 高精度、高可控性 3D资产生成框架。基于严格的 数据清洗与标准化流程,我们从 500万 3D资产 中筛选出 200万高质量数据,构建了 标准化的几何与纹理属性数据集,为3D生成提供更可靠的训…

MySQL数据类型之VARCHAR和CHAR使用详解

在设计数据库字段时,字符串类型算是最常见的数据类型之一了,这篇文章带大家深入探讨一下MySQL数据库中VARCHAR和CHAR数据类型的基本特性,以及它们之间的区别。 VARCHAR类型 VARCHAR(Variable Character,可变长度字符…

《Docker 入门与进阶:架构剖析、隔离原理及安装实操》

1 docker 简介 1.1 Docker 的优点 Docker 是一款开放平台,用于应用程序的开发、交付与运行,能将应用和基础架构分离,实现软件快速交付 ,还能以统一方式管理应用和基础架构,缩短代码从编写到上线的时间。其核心优势如…

基于Akamai云计算平台的OTT媒体点播转码解决方案

点播视频(VOD)流媒体服务依赖于视频流的转码来高效分发内容。在转码工作流程中,视频被转换为适合观看设备、网络条件和性能限制的格式。视频转码是计算密集型过程,因此最大化可用硬件上可转码的视频流数量是首要考虑因素。不同基础…

【MySQL】02.数据库基础

1. 数据库的引入 之前存储数据用文件就可以了,为什么还要弄个数据库? 文件存储存在安全性问题,文件不利于数据查询和管理,文件不利于存储海量数据,文件在程序中控制不方便。而为了解决上述问题,专家们设计出更加利于…