HarmonyOS 鸿蒙Next播放视频切换横竖屏同步问题

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next播放视频切换横竖屏同步问题
HarmonyOS 鸿蒙Next下播放视频时,切换横竖屏会出现播放窗口扩大缩小与屏幕旋转不同步现象,伴有明显延迟,窗口大小变化与横竖屏切换无法保持同步

2 回复

在HarmonyOS 鸿蒙Next系统中,播放视频切换横竖屏同步问题通常与系统的媒体播放框架和窗口管理机制相关。该现象可能由以下几个因素引起:

  1. 媒体播放器响应速度:媒体播放器在接收到屏幕旋转事件后的响应速度不够快,导致播放窗口大小调整滞后。

  2. 窗口管理策略:系统在处理屏幕旋转时,窗口管理策略可能未充分考虑视频播放的实时性,导致同步问题。

  3. 资源加载效率:视频资源在横竖屏切换时的重新加载或调整可能耗时,影响同步性。

  4. 系统动画与过渡效果:屏幕旋转时的动画效果可能掩盖了同步问题,但实际上增加了延迟感。

针对此问题,开发者应检查视频播放组件与屏幕旋转事件的监听和处理机制,确保在屏幕旋转时,视频播放窗口能够迅速且平滑地调整至新尺寸。同时,优化资源加载效率,减少因资源调整带来的延迟。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

更多关于HarmonyOS 鸿蒙Next播放视频切换横竖屏同步问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


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();

}

}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!