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) 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

页面

@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('组件在后台') 
    } 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
分享
微博
QQ
微信
回复
2024-08-14 21:19:17
相关问题
AVPlayer实现视频播放
2038浏览 • 1回复 待解决
avplayer播放视频demo
3176浏览 • 1回复 待解决
HarmonyOS AvPlayer视频播放速度问题
1415浏览 • 1回复 待解决
HarmonyOS 视频后台播放问题
827浏览 • 1回复 待解决
HarmonyOS 视频播放AVPlayer解码异常
931浏览 • 1回复 待解决
HarmonyOS 后台播放视频问题
621浏览 • 1回复 待解决
使用AVPlayer实现视频播放
2447浏览 • 1回复 待解决
HarmonyOS ijkPlayer怎么视频后台播放
637浏览 • 1回复 待解决
HarmonyOS 视频播放
888浏览 • 1回复 待解决
基于AVPlayer音频后台播放
1429浏览 • 1回复 待解决
HarmonyOS 视频播放相关
1129浏览 • 1回复 待解决
HarmonyOS 视频渲染播放
787浏览 • 1回复 待解决