HMDemo/app/src/main/ets/pages/media/AVPlayerPage.ets
2024-04-30 12:48:28 +08:00

81 lines
2.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { TitleBar } from '@devwiki/common_ui/Index';
import media from '@ohos.multimedia.media';
import Prompt from '@system.prompt';
@Entry
@Component
struct AVPlayerPage{
setAVPlayerCallback(avPlayer: media.AVPlayer) {
// error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程
avPlayer.on('error', (err) => {
console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
avPlayer.reset(); // 调用reset重置资源触发idle状态
})
// 状态机变化回调函数
avPlayer.on('stateChange', async (state, reason) => {
switch (state) {
case 'idle': // 成功调用reset接口后触发该状态机上报
console.info('AVPlayer state idle called.');
break;
case 'initialized': // avplayer 设置播放源后触发该状态上报
console.info('AVPlayerstate initialized called.');
avPlayer.prepare().then(() => {
Prompt.showToast({
message: '加载成功'
})
console.info('AVPlayer prepare succeeded.');
}, () => {
console.error(`Invoke prepare failed, code is , message is`);
});
break;
case 'prepared': // prepare调用成功后上报该状态机
console.info('AVPlayer state prepared called.');
avPlayer.play(); // 调用播放接口开始播放
break;
case 'playing': // play成功调用后触发该状态机上报
console.info('AVPlayer state playing called.');
break;
case 'paused': // pause成功调用后触发该状态机上报
console.info('AVPlayer state paused called.');
break;
case 'completed': // 播放结束后触发该状态机上报
console.info('AVPlayer state completed called.');
avPlayer.stop(); //调用播放结束接口
break;
case 'stopped': // stop接口成功调用后触发该状态机上报
console.info('AVPlayer state stopped called.');
avPlayer.reset(); // 调用reset接口初始化avplayer状态
break;
case 'released':
console.info('AVPlayer state released called.');
break;
default:
console.info('AVPlayer state unknown called.');
break;
}
})
}
build() {
Column(){
TitleBar({
title: "AVPlayer",
onLeftClicked: () => {
this.getUIContext().getRouter().back();
}
});
Button('播放').height(48).width(96).margin({top: 100})
.onClick(()=>{
this.playMusic();
})
}.align(Alignment.Center).width('100%').height('100%')
}
async playMusic() {
let avPlayer: media.AVPlayer = await media.createAVPlayer();
this.setAVPlayerCallback(avPlayer);
avPlayer.url = "https://www.yyq.cn/audio/audiomp3/f//0b/71f/f0b71f1f52d8cc9b4238e5a1f61a7a0a.mp3"
}
}