HarmonyOS 鸿蒙Next播放视频切换横竖屏同步问题 参考
import media from '@ohos.multimedia.media';
import { BusinessError } from '@ohos.base';
export class AVPlayerDemo {
private count: number = 0;
private surfaceID: string = '';
private url: string = '';
private avPlayer: media.AVPlayer | undefined;
// 注册avplayer回调函数。
setAVPlayerCallback() {
// seek操作结果回调函数。
this.avPlayer?.on('seekDone', (seekDoneTime: number) => {
console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
})
// error回调监听函数,当avplayer在操作过程中出现错误时,调用reset接口触发重置流程。
this.avPlayer?.on('error', (err: BusinessError) => {
console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
this.avPlayer?.reset();
})
// 状态机变化回调函数。
this.avPlayer?.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
switch (state) {
case 'idle':
console.info('AVPlayer state idle called.');
this.avPlayer?.release();
break;
case 'initialized':
console.info('AVPlayer state initialized called.');
if (this.avPlayer != null && this.avPlayer != undefined) {
this.avPlayer.surfaceId = this.surfaceID;
}
this.avPlayer?.prepare();
break;
case 'prepared':
console.info('AVPlayer state prepared called.');
if (this.count === 0 || this.count === 1) {
console.info('AVPlayer start to play.');
if (this.avPlayer != null && this.avPlayer != undefined) {
this.avPlayer.surfaceId = this.surfaceID;
}
this.avPlayer?.play();
}
break;
case 'playing':
console.info('AVPlayer state playing called.');
if (this.avPlayer != null && this.avPlayer != undefined) {
this.avPlayer.surfaceId = this.surfaceID
}
this.avPlayer?.play();
break;
case 'paused':
console.info('AVPlayer state paused called.');
this.avPlayer?.pause();
break;
case 'completed':
console.info('AVPlayer state paused called.');
this.avPlayer?.stop();
break;
case 'stopped':
console.info('AVPlayer state stopped called.');
this.avPlayer?.reset();
break;
case 'released':
console.info('AVPlayer state released called.' + this.surfaceID);
break;
default:
break;
}
})
}
async avPlayerLiveDemo(count: number, url ?: string, avplayer ?: media.AVPlayer) {
this.count = count;
if (url != undefined) {
this.url = url;
}
this.avPlayer = await media.createAVPlayer();
this.setAVPlayerCallback();
this.avPlayer.url = url;
}
destroy() {
this.avPlayer?.stop()
this.avPlayer?.release()
this.avPlayer = undefined
}
setSurfaceID(surface_id: string) {
console.log('setSurfaceID : ' + surface_id);
this.surfaceID = surface_id;
}
getAvPlayer(): media.AVPlayer | undefined {
return this.avPlayer;
}
getSurfaceID(): string {
return this.surfaceID;
}
setUrl(url: string) {
this.url = url;
}
getUrl(): string {
return this.url
}
start() {
this.avPlayer?.play()
}
pause() {
this.avPlayer?.pause();
}
}