HarmonyOS鸿蒙Next中如何使用AVPlayer实现音频播放功能?

HarmonyOS鸿蒙Next中如何使用AVPlayer实现音频播放功能? 我需要在应用中播放音频文件,AVPlayer 如何使用?如何控制播放、暂停、进度?

3 回复

实现思路:

  1. 使用 media.createAVPlayer 创建播放器实例:
import { media } from '@kit.MediaKit';

const avPlayer = await media.createAVPlayer();
  1. 设置播放源并监听状态变化:
avPlayer.on('stateChange', (state: string) => {
  if (state === 'initialized') {
    avPlayer.prepare();
  } else if (state === 'prepared') {
    avPlayer.play();
  }
});
avPlayer.url = 'https://example.com/audio.mp3';
  1. 控制播放、暂停、跳转:
avPlayer.play();
avPlayer.pause();
avPlayer.seek(30000); // 跳转到30秒
  1. 完整示例代码:
import { media } from '@kit.MediaKit';

@Entry
@Component
struct AudioPlayerPage {
  private avPlayer: media.AVPlayer | null = null;
  @State isPlaying: boolean = false;
  @State currentTime: number = 0;
  @State duration: number = 0;
  @State isReady: boolean = false;

  async aboutToAppear() {
    await this.initPlayer();
  }

  aboutToDisappear() {
    this.releasePlayer();
  }

  async initPlayer() {
    this.avPlayer = await media.createAVPlayer();

    this.avPlayer.on('stateChange', (state: string) => {
      console.info(`Player state: ${state}`);
      if (state === 'initialized') {
        this.avPlayer?.prepare();
      } else if (state === 'prepared') {
        this.duration = this.avPlayer?.duration || 0;
        this.isReady = true;
      } else if (state === 'completed') {
        this.isPlaying = false;
        this.currentTime = 0;
      }
    });

    this.avPlayer.on('timeUpdate', (time: number) => {
      this.currentTime = time;
    });

    this.avPlayer.on('error', (err) => {
      console.error(`Player error: ${JSON.stringify(err)}`);
    });

    this.avPlayer.url = 'https://example.com/audio.mp3';
  }

  releasePlayer() {
    if (this.avPlayer) {
      this.avPlayer.release();
      this.avPlayer = null;
    }
  }

  formatTime(ms: number): string {
    const seconds = Math.floor(ms / 1000);
    const min = Math.floor(seconds / 60);
    const sec = seconds % 60;
    return `${min}:${sec.toString().padStart(2, '0')}`;
  }

  build() {
    Column({ space: 20 }) {
      Text('音频播放器').fontSize(20).fontWeight(FontWeight.Bold)

      // 进度条
      Row() {
        Text(this.formatTime(this.currentTime)).fontSize(12)
        Slider({
          value: this.duration > 0 ? (this.currentTime / this.duration) * 100 : 0,
          min: 0,
          max: 100
        })
          .layoutWeight(1)
          .onChange((value: number) => {
            const seekTime = (value / 100) * this.duration;
            this.avPlayer?.seek(seekTime);
          })
        Text(this.formatTime(this.duration)).fontSize(12)
      }
      .width('100%')

      // 控制按钮
      Row({ space: 30 }) {
        Button('后退10s').onClick(() => {
          const newTime = Math.max(0, this.currentTime - 10000);
          this.avPlayer?.seek(newTime);
        })

        Button(this.isPlaying ? '暂停' : '播放')
          .onClick(() => {
            if (!this.isReady) return;
            if (this.isPlaying) {
              this.avPlayer?.pause();
            } else {
              this.avPlayer?.play();
            }
            this.isPlaying = !this.isPlaying;
          })

        Button('前进10s').onClick(() => {
          const newTime = Math.min(this.duration, this.currentTime + 10000);
          this.avPlayer?.seek(newTime);
        })
      }
    }
    .width('100%')
    .padding(20)
  }
}

更多关于HarmonyOS鸿蒙Next中如何使用AVPlayer实现音频播放功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用AVPlayer实现音频播放的步骤如下:

  1. 导入AVPlayer模块:import avplayer from '@ohos.multimedia.avplayer';
  2. 创建AVPlayer实例:let avPlayer = await avplayer.createAVPlayer();
  3. 设置音频源:通过avPlayer.url = '音频文件路径或网络URL';avPlayer.setDataSource(mediaSource);
  4. 准备播放:调用avPlayer.prepare();
  5. 开始播放:调用avPlayer.play();

主要控制方法包括pause()暂停、stop()停止、seek()跳转。可通过on('stateChange')监听状态变化。

在HarmonyOS Next中,使用AVPlayer实现音频播放功能主要涉及以下步骤:

  1. 导入模块与权限配置: 在module.json5文件中声明ohos.permission.INTERNET权限(用于网络音频)并导入[@kit](/user/kit).AVPlayerKit模块。

  2. 创建AVPlayer实例

    import { avPlayer } from '[@kit](/user/kit).AVPlayerKit';
    let avPlayerInstance: avPlayer.AVPlayer = await avPlayer.createAVPlayer();
    
  3. 设置播放源与准备播放

    • 本地文件:使用fdSrcdataSrc
    • 网络流:使用url
    avPlayerInstance.url = 'https://example.com/audio.mp3';
    await avPlayerInstance.prepare();
    
  4. 控制播放状态

    • 开始播放:avPlayerInstance.play()
    • 暂停播放:avPlayerInstance.pause()
    • 停止播放:avPlayerInstance.stop()
    • 跳转进度:avPlayerInstance.seek(timeInMs)
  5. 监听播放事件: 通过on('stateChange')监听状态变化(如播放、暂停、完成),使用on('timeUpdate')获取当前播放进度(单位:毫秒)。

  6. 释放资源: 在退出播放时调用avPlayerInstance.release()释放播放器资源。

示例代码片段:

// 播放控制
avPlayerInstance.play();
avPlayerInstance.pause();
avPlayerInstance.seek(30000); // 跳转至30秒

// 监听进度
avPlayerInstance.on('timeUpdate', (currentTime: number) => {
  console.log(`当前进度:${currentTime}ms`);
});

注意事项:

  • 确保播放源格式受支持(如MP3、AAC)。
  • 网络音频需检查网络权限与可用性。
  • 通过stateChange事件处理播放错误与状态同步。
回到顶部