chenjun

视频被闹铃打断时暂停视频,闹铃结束视频继续

... ... @@ -85,6 +85,7 @@ export class WDPlayerController {
*/
private bindState() {
this.avPlayer?.on(Events.STATE_CHANGE, async (state) => {
//console.info(TAG,`cj2024 state = ${state}`)
if (this.avPlayer == null) {
return
}
... ... @@ -179,6 +180,49 @@ export class WDPlayerController {
this.videoWidth = width
this.videoHeight = height
})
this.avPlayer?.on(Events.AUDIOINTERRUPT, async(interruptEvent: audio.InterruptEvent) => {
//https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/audio/audio-playback-concurrency.md#%E5%A4%84%E7%90%86%E9%9F%B3%E9%A2%91%E7%84%A6%E7%82%B9%E4%BA%8B%E4%BB%B6
if (interruptEvent.forceType === audio.InterruptForceType.INTERRUPT_FORCE) {
switch (interruptEvent.hintType) {
case audio.InterruptHint.INTERRUPT_HINT_RESUME:
await this.play()
break;
case audio.InterruptHint.INTERRUPT_HINT_PAUSE:
// 此分支表示系统已将音频流暂停(临时失去焦点),为保持状态一致,应用需切换至音频暂停状态
// 临时失去焦点:待其他音频流释放音频焦点后,本音频流会收到resume对应的音频打断事件,到时可自行继续播放
case audio.InterruptHint.INTERRUPT_HINT_STOP:
// 此分支表示系统已将音频流停止(永久失去焦点),为保持状态一致,应用需切换至音频暂停状态
// 永久失去焦点:后续不会再收到任何音频打断事件,若想恢复播放,需要用户主动触发。
// this.avPlayer?.play()
await this.pause()
break;
}
}else if (interruptEvent.forceType === audio.InterruptForceType.INTERRUPT_SHARE) {
// 共享打断类型(INTERRUPT_SHARE):应用可自主选择执行相关操作或忽略音频打断事件
switch (interruptEvent.hintType) {
case audio.InterruptHint.INTERRUPT_HINT_PAUSE:
case audio.InterruptHint.INTERRUPT_HINT_RESUME:
// 此分支表示临时失去焦点后被暂停的音频流此时可以继续播放,建议应用继续播放,切换至音频播放状态
// 若应用此时不想继续播放,可以忽略此音频打断事件,不进行处理即可
// 继续播放,此处主动执行start(),以标识符变量started记录start()的执行结果
// await audioRenderer.start().then(() => {
// started = true; // start()执行成功
// }).catch((err: BusinessError) => {
// started = false; // start()执行失败
// });
// // 若start()执行成功,则切换至音频播放状态
// if (started) {
// isPlay = true; // 此句为简化处理,代表应用切换至音频播放状态的若干操作
// } else {
// // 音频继续播放执行失败
// }
this.avPlayer?.play()
break;
default:
break;
}
}
})
}
public setXComponentController(controller: XComponentController) {
... ... @@ -271,10 +315,12 @@ export class WDPlayerController {
// if (this.avPlayer == null) {
// return
// }
//Logger.debug(TAG, "start play")
this.avPlayer?.prepare().then(() => {
this.avPlayer?.play()
}, (err: BusinessError) => {
console.error('Failed to prepare,error message is :' + err.message)
console.error(TAG,'Failed to prepare,error message is :' + err.message)
//this.avPlayer?.stop()
})
}
... ...