-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAVPlayerPage.ets
81 lines (76 loc) · 2.92 KB
/
AVPlayerPage.ets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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"
}
}