HarmonyOS鸿蒙Next中如何使用AVPlayer实现音频播放功能?
HarmonyOS鸿蒙Next中如何使用AVPlayer实现音频播放功能? 我需要在应用中播放音频文件,AVPlayer 如何使用?如何控制播放、暂停、进度?
3 回复
实现思路:
- 使用 media.createAVPlayer 创建播放器实例:
import { media } from '@kit.MediaKit';
const avPlayer = await media.createAVPlayer();
- 设置播放源并监听状态变化:
avPlayer.on('stateChange', (state: string) => {
if (state === 'initialized') {
avPlayer.prepare();
} else if (state === 'prepared') {
avPlayer.play();
}
});
avPlayer.url = 'https://example.com/audio.mp3';
- 控制播放、暂停、跳转:
avPlayer.play();
avPlayer.pause();
avPlayer.seek(30000); // 跳转到30秒
- 完整示例代码:
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实现音频播放的步骤如下:
- 导入AVPlayer模块:
import avplayer from '@ohos.multimedia.avplayer'; - 创建AVPlayer实例:
let avPlayer = await avplayer.createAVPlayer(); - 设置音频源:通过
avPlayer.url = '音频文件路径或网络URL';或avPlayer.setDataSource(mediaSource); - 准备播放:调用
avPlayer.prepare(); - 开始播放:调用
avPlayer.play();
主要控制方法包括pause()暂停、stop()停止、seek()跳转。可通过on('stateChange')监听状态变化。
在HarmonyOS Next中,使用AVPlayer实现音频播放功能主要涉及以下步骤:
-
导入模块与权限配置: 在
module.json5文件中声明ohos.permission.INTERNET权限(用于网络音频)并导入[@kit](/user/kit).AVPlayerKit模块。 -
创建AVPlayer实例:
import { avPlayer } from '[@kit](/user/kit).AVPlayerKit'; let avPlayerInstance: avPlayer.AVPlayer = await avPlayer.createAVPlayer(); -
设置播放源与准备播放:
- 本地文件:使用
fdSrc或dataSrc。 - 网络流:使用
url。
avPlayerInstance.url = 'https://example.com/audio.mp3'; await avPlayerInstance.prepare(); - 本地文件:使用
-
控制播放状态:
- 开始播放:
avPlayerInstance.play() - 暂停播放:
avPlayerInstance.pause() - 停止播放:
avPlayerInstance.stop() - 跳转进度:
avPlayerInstance.seek(timeInMs)
- 开始播放:
-
监听播放事件: 通过
on('stateChange')监听状态变化(如播放、暂停、完成),使用on('timeUpdate')获取当前播放进度(单位:毫秒)。 -
释放资源: 在退出播放时调用
avPlayerInstance.release()释放播放器资源。
示例代码片段:
// 播放控制
avPlayerInstance.play();
avPlayerInstance.pause();
avPlayerInstance.seek(30000); // 跳转至30秒
// 监听进度
avPlayerInstance.on('timeUpdate', (currentTime: number) => {
console.log(`当前进度:${currentTime}ms`);
});
注意事项:
- 确保播放源格式受支持(如MP3、AAC)。
- 网络音频需检查网络权限与可用性。
- 通过
stateChange事件处理播放错误与状态同步。

