HarmonyOS AVPlayer播放视频,退出页面后台播放时,视频会停止

使用AVPlayer播放视频时,并赋与了surfaceId可以正常播放,但当退出了当前页面XComponent时,会被停止播放。音频没有问题的,对接了长时任务和avSession

HarmonyOS
2024-08-14 16:33:48
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

组件目前是只有创建和销毁两种生命周期,监听不到前后台的切换。目前只有UIAbility有感知前后台切换的能力。您可以给组件设置一个应用前后台的变量,在应用前后台切换的时候,在UIAbility中对应的生命周期函数上将状态存在AppStorage中,在组件中获取AppStorage状态变量的改变并执行对应视频播放的逻辑。

参考代码:

UIAbility中

onWindowStageCreate(windowStage: window.WindowStage): void { 
  // Main window is created, set main page for this ability 
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 
  windowStage.loadContent('pages/Index', (err) => { 
  AppStorage.setOrCreate<boolean>('Video',true) 
  if (err.code) { 
  hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 
  return; 
} 
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); 
}); 
} 
onForeground(): void { 
  // Ability has brought to foreground 
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); 
  AppStorage.setOrCreate('Video',true) 
} 
onBackground(): void { 
  // Ability has back to background 
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); 
  AppStorage.setOrCreate('Video',false) 
}

页面

@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World' 
  @StorageLink('Video') isOnForeground:boolean = true 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
        Vid({isOnForeground:this.isOnForeground}) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
} 
@Component 
struct Vid { 
  @Watch('change')@Link isOnForeground:boolean 
  @State message: string = 'Video' 
  build() { 
    Text("message") 
      .fontSize(50) 
      .fontWeight(FontWeight.Bold) 
      .onClick(()=>{ 
        this.message += this .isOnForeground 
        console.log(""+this.isOnForeground) 
      }) 
  } 
  change() { 
    if (this.isOnForeground) { 
      console.log('组件在前台') 
    } else { 
      console.log('组件在后台') 
    } 
  } 
}
分享
微博
QQ
微信
回复
2024-08-14 21:19:17
相关问题
AVPlayer实现视频播放
749浏览 • 1回复 待解决
avplayer播放视频demo
1293浏览 • 1回复 待解决
HarmonyOS AvPlayer视频播放速度问题
333浏览 • 1回复 待解决
使用AVPlayer实现视频播放
1037浏览 • 1回复 待解决
基于AVPlayer音频后台播放
446浏览 • 1回复 待解决
HarmonyOS 列表视频滚动播放
214浏览 • 1回复 待解决
SDK问题,视频播放替代?
150浏览 • 1回复 待解决
HarmonyOS AVPlayer 播放问题
496浏览 • 1回复 待解决
HarmonyOS 怎么获取视频播放时长?
80浏览 • 1回复 待解决
HarmonyOS webview如何播放本地沙箱视频
1366浏览 • 1回复 待解决
创建多个视频组件无法播放
2126浏览 • 1回复 待解决
HarmonyOS 列表视频全屏播放实现
297浏览 • 1回复 待解决