HarmonyOS 鸿蒙Next中AVPlayer AI抠图抠字时出现问题

HarmonyOS 鸿蒙Next中AVPlayer AI抠图抠字时出现问题 用的 图像AI分析功能

使用enableAnalyzer属性开启图像AI分析功能。可通过XComponentController控制开始、停止图形AI分析。

精简的使用代码如下:

this.player.avPlayer?.on('seekDone', (percent) => {
  this.xComponentController.startImageAnalyzer(VideoOperateUtil.config).catch((error: BusinessError) => {
    console.error("error code: " + error.code);
  })
})
this.player.avPlayer?.on('stateChange', async (state) => {
  switch (state) {
    case 'playing':
      this.player.playing = true
      this.xComponentController.stopImageAnalyzer()
      break
    case 'paused':
      this.player.playing = false
      setTimeout(() => {
        this.xComponentController.startImageAnalyzer(VideoOperateUtil.config)
          .catch((error: BusinessError) => {
            console.error("error code: " + error.code)
          })
      }, 100)
      break
  }
})

cke_121.jpeg

实战开源项目:流心播放器。


更多关于HarmonyOS 鸿蒙Next中AVPlayer AI抠图抠字时出现问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

解决方案:

在播放和暂停时,拖动结束事件seekDone都会发生。故需增加判断,只在暂停时的拖动才触发,代码应改为

this.player.avPlayer?.on('seekDone', (percent) => {
  if(!this.player.playing) {
    this.xComponentController.startImageAnalyzer(VideoOperateUtil.config).catch((error: BusinessError) => {
      console.error("error code: " + error.code);
    })
  }
})

总结:

avplayer要启用AI抠图扣字,需要在paused或seekDone且暂停时startImageAnalyzer,在playing时stopImageAnalyzer。

this.player.avPlayer?.on('seekDone', (percent) => {
  if(!this.player.playing) {
    this.xComponentController.startImageAnalyzer(VideoOperateUtil.config).catch((error: BusinessError) => {
      console.error("error code: " + error.code);
    })
  }
})
this.player.avPlayer?.on('stateChange', async (state) => {
  switch (state) {
    case 'playing':
      this.player.playing = true
      this.xComponentController.stopImageAnalyzer()
      break
    case 'paused':
      this.player.playing = false
      setTimeout(() => {
        this.xComponentController.startImageAnalyzer(VideoOperateUtil.config)
          .catch((error: BusinessError) => {
            console.error("error code: " + error.code)
          })
      }, 100)
      break
  }
})

更多关于HarmonyOS 鸿蒙Next中AVPlayer AI抠图抠字时出现问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,AVPlayer进行AI抠图抠字时出现问题,通常与多媒体框架或AI模型处理有关。可能涉及视频解码、AI算法适配或资源调度异常。建议检查AVPlayer的配置参数、AI模型版本与系统兼容性,并确保硬件加速支持正常。

在HarmonyOS Next中,AVPlayer结合XComponent的AI图像分析功能(如抠图/抠字)出现问题,通常与图像分析器的生命周期管理和视频帧状态同步有关。根据你提供的代码,主要问题可能出现在以下几个方面:

  1. 分析器启停时机冲突:在seekDonestateChange事件中频繁调用startImageAnalyzerstopImageAnalyzer,可能导致分析器状态混乱。尤其是在paused状态下使用setTimeout延迟启动,若用户快速操作(如频繁暂停/播放),可能造成前一次分析未停止就启动新分析。

  2. 视频帧未就绪seekDone事件触发时,AVPlayer可能尚未解码出对应帧的完整图像数据,此时启动图像分析可能获取到无效或空数据,导致分析失败或返回错误结果。

  3. XComponent渲染状态:AI分析功能依赖XComponent的纹理数据。若视频仍在渲染过程中(如刚切换状态),直接调用startImageAnalyzer可能无法获取有效纹理。需要确保XComponent已处于稳定渲染状态。

建议排查步骤

  • 检查startImageAnalyzer调用前,XComponent是否已关联有效的AVPlayer Surface并完成帧渲染。可通过监听XComponent的onLoad事件确保组件就绪。
  • stateChange事件中,优先处理播放状态(如playing)再暂停分析,避免状态竞争。可考虑使用标志位控制分析器单一实例。
  • 验证VideoOperateUtil.config配置是否符合当前视频分辨率与格式,不匹配的配置可能导致分析器初始化失败。

若需进一步调试,可捕获startImageAnalyzer返回的BusinessError具体code,对照文档定位是资源占用、参数错误还是帧数据异常。

回到顶部