HarmonyOS应用开发实战:猫猫大作战-AVPlayer 音视频播放

前言

AVPlayer 是 HarmonyOS 的多媒体播放器,支持音频和视频播放。在「猫猫大作战」中,AVPlayer 用于播放背景音乐和音效。

一、AVPlayer 基础

typescript 复制代码
import { media } from '@kit.MediaKit';

class BGMManager {
  private player: media.AVPlayer | null = null;

  async playBGM(src: string): Promise<void> {
    // 创建播放器
    this.player = await media.createAVPlayer();
    this.player.on('stateChange', (state) => {
      console.info(`播放状态: ${state}`);
    });
    // 设置数据源
    await this.player.setSrc(src);
    // 循环播放
    await this.player.setLoop(true);
    // 设置音量 50%
    await this.player.setVolume(0.5);
    // 开始播放
    await this.player.play();
  }

  pause(): void {
    this.player?.pause();
  }

  resume(): void {
    this.player?.play();
  }

  stop(): void {
    this.player?.stop();
    this.player?.release();
    this.player = null;
  }
}

二、播放控制

方法 功能 说明
play() 开始/恢复播放 异步方法
pause() 暂停 保留位置
stop() 停止 重置位置
seek(time) 跳转到指定时间 time 单位 ms
setVolume(v) 设置音量 0.0~1.0
setLoop(b) 是否循环 boolean
release() 释放资源 用完必须调用

三、游戏音效

typescript 复制代码
class SFXManager {
  private cache: Map<string, media.AVPlayer> = new Map();

  async playSFX(name: string): Promise<void> {
    let sfx = this.cache.get(name);
    if (!sfx) {
      sfx = await media.createAVPlayer();
      await sfx.setSrc(`/resources/sfx/${name}.mp3`);
      this.cache.set(name, sfx);
    }
    // 每次从开始播放
    await sfx.seek(0);
    await sfx.play();
  }

  // 游戏中的音效
  playMerge() { this.playSFX('merge'); }
  playLevelUp() { this.playSFX('level_up'); }
  playGameOver() { this.playSFX('game_over'); }
  playButton() { this.playSFX('button_click'); }
}

四、常见问题

问题 原因 解决
播放无声 音量 0 / 静音模式 检查 setVolume 和系统音量
文件格式不支持 只支持 mp3/aac/wav 转换音频文件
切换 BGM 时卡顿 播放器未释放 先 release 再重建
后台无法播放 未申请后台任务 backgroundTaskManager 后台运行

五、最佳实践

  1. BGM 循环播放setLoop(true)
  2. 音效缓存:短音频缓存到 Map 避免重复创建
  3. 切后台暂停onBackground 中暂停,回前台恢复
  4. 用完释放release() 避免内存泄漏

总结

AVPlayer 用于播放游戏背景音乐和音效。核心要点:createAVPlayer() 创建、 setSrc 设置音频源、 play/pause/stop 控制、 release() 释放

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

相关推荐
安好说AI29 分钟前
Flutter 三方库 adaptive_image_picker 的鸿蒙化适配指南:零权限选图、纯 Dart 裁剪与目标大小压缩
flutter·harmonyos
2501_919749032 小时前
华为鸿蒙免费PDF工具—小羊免费PDF
华为·pdf·harmonyos·鸿蒙
贾伟康4 小时前
【口算王|10】HarmonyOS ArkTS 语音报题实战:协调朗读、作答和页面生命周期
生命周期·harmonyos·arkts·语音交互·texttospeech
贾伟康5 小时前
【口算王|08】HarmonyOS ArkTS 分类训练实战:让年级与运算分类参数保持一致
harmonyos·arkts·数据建模·路由参数·分类训练
光锥智能5 小时前
华为新麒麟芯片、鸿蒙7问世,手机底层竞赛升级
华为·智能手机·harmonyos
贾伟康6 小时前
【口算王|09】HarmonyOS ArkTS 学习统计实战:计算连续训练和正确率趋势
harmonyos·arkts·数据可视化·preferences·学习统计
lqj_本人6 小时前
Flutter 鸿蒙实战:用 wakelock_plus 三方库给阅读页加上屏幕常亮
flutter·华为·harmonyos
aqi0017 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
熊猫钓鱼>_>18 小时前
Flutter app_settings 鸿蒙适配实战:Intent 体系到 Want 的跨越
flutter·华为·harmonyos·openharmony·intent·want
贾伟康21 小时前
【句匠|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
harmonyos·arkts·应用上架·appgallery·发布审核