当前位置: 首页 > news >正文

OpenHarmony实战开发-如何使用AVPlayer开发音频播放功能(ArkTS)

使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。

以下指导仅介绍如何实现媒体资源播放,如果要实现后台播放或熄屏播放,需要使用AVSession(媒体会话)和申请长时任务,避免播放被系统强制中断。

播放的全流程包含:创建AVPlayer,设置播放资源,设置播放参数(音量/倍速/焦点模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。

在进行应用开发的过程中,开发者可以通过AVPlayer的state属性主动获取当前状态或使用on(‘stateChange’)方法监听状态变化。如果应用在音频播放器处于错误状态时执行操作,系统可能会抛出异常或生成其他未定义的行为。

图1 播放状态变化示意图

在这里插入图片描述

状态的详细说明请参考AVPlayerState。当播放处于prepared / playing / paused / completed状态时,播放引擎处于工作状态,这需要占用系统较多的运行内存。当客户端暂时不使用播放器时,调用reset()或release()回收内存资源,做好资源利用。

开发步骤及注意事项

详细的API说明请参考AVPlayer API参考。

1.创建实例createAVPlayer(),AVPlayer初始化idle状态。

2.设置业务需要的监听事件,搭配全流程场景使用。支持的监听事件包括:

在这里插入图片描述
3.设置资源:设置属性url,AVPlayer进入initialized状态。

说明:

下面代码示例中的url仅作示意使用,开发者需根据实际情况,确认资源有效性并设置:

  • 如果使用本地资源播放,必须确认资源文件可用,并使用应用沙箱路径访问对应资源,参考获取应用文件路径。应用沙箱的介绍及如何向应用沙箱推送文件。
  • 如果使用网络播放路径,需声明权限:ohos.permission.INTERNET。
  • 如果使用ResourceManager.getRawFd打开HAP资源文件描述符
  • 需要使用支持的播放格式与协议。

4.准备播放:调用prepare(),AVPlayer进入prepared状态,此时可以获取duration,设置音量。

5.音频播控:播放play(),暂停pause(),跳转seek(),停止stop() 等操作。

6.(可选)更换资源:调用reset()重置资源,AVPlayer重新进入idle状态,允许更换资源url。

7.退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放。

完整示例

参考以下示例,完整地播放一首音乐。

import media from '@ohos.multimedia.media';
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';export class AVPlayerDemo {private count: number = 0;private isSeek: boolean = true; // 用于区分模式是否支持seek操作private fileSize: number = -1;private fd: number = 0;// 注册avplayer回调函数setAVPlayerCallback(avPlayer: media.AVPlayer) {// seek操作结果回调函数avPlayer.on('seekDone', (seekDoneTime: number) => {console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);})// error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程avPlayer.on('error', (err: BusinessError) => {console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);avPlayer.reset(); // 调用reset重置资源,触发idle状态})// 状态机变化回调函数avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {switch (state) {case 'idle': // 成功调用reset接口后触发该状态机上报console.info('AVPlayer state idle called.')
http://www.xdnf.cn/news/837487.html

相关文章:

  • Go最新VS配置OpenCV教程(超详细)_opencv安装教程,2024年最新不了解这些多线程的基础知识很难学懂Golang
  • 什么猫咪最受欢迎?Python爬取全网猫咪图片,哪一款是你最爱的_猫咪最新网址
  • 3ds Max2024下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了(附安装包)_3dmax2024安装教程(3)
  • Mendix性能最佳实践
  • typedef struct 用法
  • 推荐一个个性化自定义的导航网站,很惊艳
  • Win10网络共享设置的方法步骤
  • 五十音图速记
  • 域名FAQ
  • 电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。
  • 收集一些关于前端的网站(持续更新)
  • chm Navigation to the webpage was canceled解决方法
  • apple iphone 3gs 有锁机 刷机 越狱 解锁 全教程(报错3194,3014,1600,短信发不出去等问题可参考)...
  • 最新最全的Ubuntu 9.10 下载地址
  • 【电脑使用】两台电脑局域网共享文件
  • boobooke
  • 4399 完美漂移 辅助 外挂 刷车 刷钻
  • APK改之理(APK IDE)修改APK简单的入门教程
  • 消息队列mq的原理及实现方法
  • DNF外挂
  • 30道linux运维面试题(很精典)
  • 软碟通制作 U 盘重装启动盘的教程
  • SSD原理解读-从入门到精通
  • 【巨人的肩膀】实践出真知:全网最强秒杀系统架构解密
  • 7-9 天梯赛团队总分
  • 新手入门级 | nodejs调试
  • My_blog个人博客系统
  • 谁动了你的HTTPS流量?
  • “古董级” 诺基亚功能机跑Linux是怎样的画风?
  • 还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS!