HarmonyOS鸿蒙Next中使用AVScreenCapture录屏后获取原始码流进行编码,在录屏时手机横屏应该如何处理,只需要重启编码器还是录屏也需要停止重新打开?

HarmonyOS鸿蒙Next中使用AVScreenCapture录屏后获取原始码流进行编码,在录屏时手机横屏应该如何处理,只需要重启编码器还是录屏也需要停止重新打开?

当前存在疑问:

使用AVScreenCapture录屏后获取原始码流进行编码, 在录屏时手机横屏应该如何处理,是只需要重启编码器还是录屏和编码都需要停止重新打开?

目前已尝试方式:

  1. 每次横竖屏切换停止录屏、停止编码,重新Init、Start启动录屏和编码。结果: 每次横竖屏切换会重新拉起录屏权限申请弹窗,体验非常差

  2. 每次横竖屏切换只重置编码器,不停止录屏,暂时不知道这种方式是否可行,目前暂未跑通,每次横竖屏切换会闪退,报错(OH_AVBuffer_GetAddr(), 127): input buffer is nullptr!,自身代码未在reset后调用OH_AVBuffer_GetAddr,应该是surface模式系统在输入时native调用的,不知如何处理。

考虑到录屏和编码都需要传入视频宽高,如果使用第二种方式,只修改编码宽高未修改录屏宽高是否行不通,是否必须使用第一种方式?


更多关于HarmonyOS鸿蒙Next中使用AVScreenCapture录屏后获取原始码流进行编码,在录屏时手机横屏应该如何处理,只需要重启编码器还是录屏也需要停止重新打开?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中使用AVScreenCapture录屏时,横竖屏切换需要重新配置编码器参数。录屏无需停止,但需调用AVScreenCapture.setDisplayRotation()调整旋转参数,并重置编码器的分辨率、方向等配置。编码器需重启以应用新的参数设置,保持输出视频方向正确。整个过程无需中断录屏流采集。

更多关于HarmonyOS鸿蒙Next中使用AVScreenCapture录屏后获取原始码流进行编码,在录屏时手机横屏应该如何处理,只需要重启编码器还是录屏也需要停止重新打开?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中处理录屏横竖屏切换时,建议采用以下方案:

  1. 关于录屏宽高适配问题:
  • 录屏服务(AVScreenCapture)本身会根据当前屏幕方向自动调整输出帧的宽高比
  • 不需要停止/重启录屏服务,系统会自动处理方向变化
  1. 编码器处理方案:
  • 当检测到屏幕方向变化时,应先停止当前编码器
  • 创建新的编码器实例,使用新的宽高参数初始化
  • 关键点:保持录屏服务持续运行,仅重置编码器
  1. 针对你遇到的闪退问题:
  • OH_AVBuffer_GetAddr()报错通常是因为编码器重置后未正确重新配置输入Surface
  • 确保在编码器重置后重新配置输入Surface与录屏输出的关联
  1. 性能优化建议:
  • 可以预创建横竖屏两套编码器实例
  • 方向切换时只需切换使用对应的编码器
  • 避免频繁创建销毁带来的性能开销

这种方案既避免了频繁弹出权限提示的问题,又能正确处理方向变化。注意在编码器重置时要确保所有缓冲区都被正确释放和重新初始化。

回到顶部