使用 AVScreenCapture 抓屏遇到的一些问题(HarmonyOS 鸿蒙Next)

使用 AVScreenCapture 抓屏遇到的一些问题(HarmonyOS 鸿蒙Next) 按照 demo 写了抓屏代码遇到以下几个问题:

  1. OH_VideoCaptureInfo 结构里面的宽高参数有什么要求吗?按照 demo 里面给的倍数设置是可以的,但是设置其它分辨率就不行,比如 1080x1920,720x1280,或者使用获取的屏幕宽高都会导致回调不吐视频数据;
  2. OH_VideoCaptureInfo 结构里面的视频格式设置 OH_VIDEO_SOURCE_SURFACE_RGBA 是可以回调 RGBA 视频帧的,但是设置 OH_VIDEO_SOURCE_SURFACE_YUV 就不回调视频帧,是还没实现吗?
  3. 抓屏过程中如果 app 退后台,几秒后 app 就退出了,日志显示下面的错误:
02-25 20:20:55.380   55532-55840   A00000/com.exa....aryademo/AKI com.example.aryademo D   [DEBUG:safety_callback.h(106)] begin to call threadsafe function.
02-25 20:20:55.381   55532-55532   A00000/com.exa....aryademo/AKI com.example.aryademo D   [DEBUG:safety_callback.h(146)] trigger threadsafe call js.
02-25 20:20:55.381   55532-55532   A00000/com.exa....aryademo/AKI com.example.aryademo D   [DEBUG:napi_value.h(99)] ToNapiValue for object
02-25 20:20:55.381   55532-55532   A00000/com.exa....aryademo/AKI com.example.aryademo D   [DEBUG:class_wrapper.cpp(22)] ClassWrapperBase unsafe obj:0x5cc1401c00
02-25 20:20:55.381   55532-55532   A00000/com.exa....aryademo/AKI com.example.aryademo D   [DEBUG:class_wrapper.h(103)] ClassWrapperBase wrap obj: 0x5cc7af5140
02-25 20:20:55.381   55532-55532   A00000/com.exa....aryademo/AKI com.example.aryademo D   [DEBUG:napi_value.h(99)] ToNapiValue for object
02-25 20:20:55.400   55532-55583   C057C7/com.exa...nderConnector com.example.aryademo W   WriteBinder 209: ioctl_binder returned EINTR time:222432032570470
02-25 20:20:55.400   55532-55580   C057C7/com.exa...nderConnector com.example.aryademo W   WriteBinder 209: ioctl_binder returned EINTR time:222432032590262
02-25 20:20:55.405   55532-55953   C057C1/com.exa...IPCWorkThread com.example.aryademo I   ThreadHandler 124: proto:0 policy:0 name:OS_IPC_4_55953 invoker:3350763776
02-25 20:20:55.405   55532-55532   C01317/com.exa...yademo/AppKit com.example.aryademo W   [js_ability_stage.cpp:220]Not found AbilityStage.js
02-25 20:20:55.405   55532-55532   C01321/com.exa...emo/JsRuntime com.example.aryademo W   [js_runtime.cpp:1462]invalid nativeRef
02-25 20:20:55.405   55532-55532   C01321/com.exa...emo/JsRuntime com.example.aryademo W   [js_runtime.cpp:1462]invalid nativeRef
02-25 20:20:55.405   55532-55605   C057C7/com.exa...nderConnector com.example.aryademo W   WriteBinder 209: ioctl_binder returned EINTR time:222432038042345
02-25 20:20:55.406   55532-55581   C057C7/com.exa...nderConnector com.example.aryademo W   WriteBinder 209: ioctl_binder returned EINTR time:222432039401200
02-25 20:20:55.408   55532-55532   C01317/com.exa...yademo/AppKit com.example.aryademo E   [main_thread.cpp:3436]Get assert thread instance is nullptr
02-25 20:20:55.408   55532-55532   C02C11/com.exa...demo/APPSPAWN com.example.aryademo I   [appspawn_server.c:42]App exit code: 0

更多关于使用 AVScreenCapture 抓屏遇到的一些问题(HarmonyOS 鸿蒙Next)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于使用 AVScreenCapture 抓屏遇到的一些问题(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用AVScreenCapture进行抓屏时,可能会遇到以下问题:

  1. 权限问题:AVScreenCapture需要特定的权限才能进行屏幕捕获。确保在应用的配置文件中声明了ohos.permission.CAPTURE_SCREEN权限,并在运行时请求用户授权。

  2. 兼容性问题:不同设备和系统版本可能对AVScreenCapture的支持程度不同。确保在目标设备上测试抓屏功能,以确认其兼容性。

  3. 帧率问题:抓屏时可能会遇到帧率不稳定的情况。可以通过调整AVScreenCaptureConfig中的帧率设置来优化性能。

  4. 分辨率问题:抓屏的分辨率可能不符合预期。可以通过设置AVScreenCaptureConfig中的分辨率参数来控制输出图像的质量。

  5. 内存泄漏:长时间使用AVScreenCapture可能会导致内存泄漏。确保在不需要抓屏时及时释放资源,避免内存占用过多。

  6. 异常处理:抓屏过程中可能会遇到各种异常情况,如设备不支持、权限被拒绝等。确保在代码中做好异常处理,避免应用崩溃。

  7. 性能问题:抓屏操作可能会对设备性能产生影响,尤其是在低端设备上。可以通过优化抓屏逻辑和减少不必要的操作来提升性能。

  8. 多线程问题:如果抓屏操作涉及多线程,需要注意线程安全问题,避免数据竞争和死锁。

  9. 音频同步问题:如果同时抓取屏幕和音频,可能会遇到音视频不同步的问题。可以通过调整音视频的时间戳来确保同步。

  10. 应用生命周期管理:在应用进入后台或暂停时,应停止抓屏操作,以避免不必要的资源消耗。

这些问题在使用AVScreenCapture时可能会遇到,具体解决方法需要根据实际情况进行调整和优化。

回到顶部