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

使用AVPlayer进行音频播放开发基础设计

在使用AvPlayer进行设计之前,需要获取相应对象,后期围绕该对象展开操作

    const player = await media.createAVPlayer()

然后对播放器进行初始化设置:

player.on('stateChange', (state) => {switch (state) {case 'initialized':player.prepare()break;case 'prepared':player.play()break;case 'playing':player.play()break;case 'paused':player.pause()break;case 'completed':player.stop() // 播放结束(如果需要循环播放这里可以用if判断是否循环,进入不同状态)break;case 'stopped':player.reset() // stop 时 reset -> 释放音频资源break;default:break;}

这里可以使用一个函数将AvPlayer对象的获取和初始化工作封装起来,方便后期调用,给出示例如下:

 async getAVPlayerInstance() {// 如果已存在,直接返回if (this.avPlayer !== null) {return this.avPlayer}// 初始化播放器const player = await media.createAVPlayer()player.on('stateChange', (state) => {switch (state) {case 'initialized':player.prepare()break;case 'prepared':player.play()break;case 'playing':player.play()break;case 'paused':player.pause()break;case 'completed':player.stop() // 播放结束break;case 'stopped':player.reset() // stop 时 reset -> 释放音频资源break;default:break;}})this.avPlayer = playerreturn this.avPlayer}

进行完初始化设置之后就可以将音频对象的各个状态进行监听并且能够进行相应的操作与更改,这里不多做展示。

接下来展示音频读取函数的一个书写示例(这里只展示RawFile资源文件的读取方法,沙箱文件读取或通过网络连接获取的数据需另行获取)

// 加载 src/main/resources/rawfile 的文件async playByRawSrc(rawFdPath: string) {const player = await this.getAVPlayerInstance()// 先释放原来的资源await player.reset()// 获取文件信息const context = getContext()// 加载 src/main/resources/rawfile 文件夹中的文件const fileDescriptor = await context.resourceManager.getRawFd(rawFdPath)// 设置播放路径player.fdSrc = fileDescriptor// 播放player.play()}

接下来给出一个暂停音频播放的函数,将播放器状态更改到其他状态的函数书写同理:

// 停止播放async stop() {const player = await this.getAVPlayerInstance()this.loop = falseplayer.stop()}


http://www.mrgr.cn/news/59829.html

相关文章:

  • 安全运营 -- 监控linux命令history
  • [LVGL] 自定义控件例子
  • Meta分析(荟萃分析)
  • 数据挖掘(二)
  • nodejs 基础
  • 探索区块链新天地:如何通过 Let‘s Move 学习 Move 语言并获取 SUI 奖励
  • Axure随机验证码高级交互
  • 机器学习/数据分析案例---学生消费行为分析,“泰迪杯赛题”
  • 模拟退火算法
  • 数据结构与算法汇总整理篇——数组与字符串双指针与滑动窗口的联系学习及框架思考
  • 【文献及模型、制图分享】中国自然保护地典型治理模式成效比较——基于社区居民感知视角
  • IDEA如何快速复制日志生成sql语句,太妙啦
  • 逻辑推理学习笔记
  • 【Android】ViewPager的MVP架构搭建
  • 嵌入式——STM32外设应用
  • stm32的boot引脚接线
  • 《CUDA编程》10.线程束的基本函数与协作组
  • C++和Java该如何进行选择?
  • C++中获取硬盘ID的方法
  • 鸿蒙文本组件高级特性——富文本属性字符串