HarmonyOS 播放视频,多个XComponent公用一个AVPlayer

多个XComponent如何公用一个AVPlayer?更换XComponent后,新的surfaceId无法和已有AVPlayer实例绑定。同一个player,不重新prepare,可以绑定到新的surfaceId上面吗?

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

目前支持动态切换surface,实现跨页面视频播放无缝转场,可参考以下示例:

1.在page1页面通过GlobalContext将AVPlayer当做全局单例变量放到Map<string, media.AVPlayer>里面。

2.通过router跳转到page2页面,通过Map<string, media.AVPlayer>获取单例AVPlayer,将page2页面的Xcomponent的SurfaceId设置给AVPlayer。

import { media } from '@kit.MediaKit';

export class GlobalContext {
  private constructor() {}
  private static instance: GlobalContext;
  private _objects = new Map<string, media.AVPlayer>();
  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  getObject(value: string): media.AVPlayer | undefined {
    return this._objects.get(value);
  }

  setObject(key: string, objectClass: media.AVPlayer): void {
    this._objects.set(key, objectClass);
  }
}
onJumpClick(): void {
  router.replaceUrl({
  url: 'pages/player' // 目标url
}, (err) => {
  if (err) {
    console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);
    return;
  }
  console.info('Invoke pushUrl succeeded.');
})
}
//将AVPlayer放进全局map
if (this.player) {
  GlobalContext.getContext().setObject('value', this.player);
}
.onLoad(() => {
  this.mXComponentController.setXComponentSurfaceSize({ surfaceWidth: this.xComponentWidth, surfaceHeight: this.xComponentHeight });
  this.surfaceID=this.mXComponentController.getXComponentSurfaceId();
   console.info('onLoad'+this.surfaceID)
  //取出全局map里面的AVPlayer
  avPlayer=GlobalContext.getContext().getObject('value');
  if (avPlayer) {
    avPlayer.surfaceId=this.surfaceID;
  }
})
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 封装一个公用的getContext()
256浏览 • 1回复 待解决
avplayer播放视频demo
1874浏览 • 1回复 待解决
AVPlayer实现视频播放
1279浏览 • 1回复 待解决
HarmonyOS XComponent播放视频问题
251浏览 • 1回复 待解决
HarmonyOS AvPlayer视频播放速度问题
638浏览 • 1回复 待解决
求告知如何全屏播放一个视频
669浏览 • 1回复 待解决
HarmonyOS 视频播放AVPlayer解码异常
247浏览 • 1回复 待解决
HarmonyOS AVPlayer XComponent
411浏览 • 1回复 待解决
使用AVPlayer实现视频播放
1593浏览 • 1回复 待解决
创建多个视频组件无法播放
2415浏览 • 1回复 待解决