HarmonyOS鸿蒙Next中关于使用videoOutput来作为OpenGL的数据生产者实现渲染

HarmonyOS鸿蒙Next中关于使用videoOutput来作为OpenGL的数据生产者实现渲染 问题描述

我想使用 videoOutput 作为数据的输入源供 OpenGL ES 进行渲染,而不是使用预览流。请问这种做法是否可行?

实现代码示例

// 创建 NativeImage 关联 OpenGL 纹理
nativeImage = OH_NativeImage_Create(textureId, GL_TEXTURE_EXTERNAL_OES);

// 获取 nativeImage 的 surfaceID
uint64_t nativeImageSurfaceId_ = 0;
OH_NativeImage_GetSurfaceId(nativeImage, &nativeImageSurfaceId_);

// 添加可用帧回调
OH_NativeImage_SetOnFrameAvailableListener(nativeImage, callback);

// 使用获取的 surfaceID 来创建视频录制流
let videoOutput = CameraManager.createVideoOutput(videoProfile, nativeImageSurfaceId_);

问题

在这样的实现中,可用帧回调没有返回,请问这样的使用方式是否可行?如果不可行,是否有其他可行的方案,使用视频录制流来进行 OpenGL ES 的渲染?


更多关于HarmonyOS鸿蒙Next中关于使用videoOutput来作为OpenGL的数据生产者实现渲染的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

您参考这个链接:https://gitee.com/GuYueFei/harmonyOSNativeCamera/tree/master,openGL渲染相关的代码在render_thread.cpp中,相机生产的数据,通过native image渲染最后上屏。

更多关于HarmonyOS鸿蒙Next中关于使用videoOutput来作为OpenGL的数据生产者实现渲染的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,videoOutput可以作为OpenGL的数据生产者来实现渲染。videoOutput是鸿蒙系统提供的一个组件,用于处理视频输出相关的任务。通过将videoOutput与OpenGL结合,可以实现高效的视频渲染。

具体实现步骤如下:

  1. 创建videoOutput实例:首先需要创建一个videoOutput实例,用于处理视频数据的输出。可以通过VideoOutput类来创建实例,并配置相关的参数,如视频格式、分辨率等。

  2. 配置OpenGL上下文:在鸿蒙系统中,OpenGL的上下文可以通过EGL来管理。需要创建一个EGLDisplay,并配置EGLConfigEGLContext,以便在OpenGL中进行渲染。

  3. 绑定videoOutput到OpenGL:通过videoOutput的接口,可以将视频数据绑定到OpenGL的纹理中。可以使用videoOutputgetSurface()方法获取一个Surface对象,然后通过EGL将这个Surface与OpenGL的纹理绑定。

  4. 渲染视频帧:在OpenGL的渲染循环中,可以通过videoOutput获取视频帧数据,并将其渲染到屏幕上。可以使用glTexImage2D将视频帧数据上传到OpenGL的纹理中,然后通过着色器进行渲染。

  5. 释放资源:在不需要渲染时,需要释放相关的资源,包括videoOutput实例、OpenGL上下文以及纹理等。

通过以上步骤,可以在HarmonyOS鸿蒙Next中使用videoOutput作为OpenGL的数据生产者,实现高效的视频渲染。

在HarmonyOS鸿蒙Next中,videoOutput可以作为OpenGL的数据生产者,用于实现视频渲染。通过videoOutput获取视频帧数据,并传递给OpenGL进行渲染。具体步骤包括:

  1. 创建videoOutput实例并绑定视频源;
  2. 通过videoOutput获取视频帧数据;
  3. 使用OpenGL的纹理对象绑定视频帧数据;
  4. 在OpenGL渲染循环中进行纹理映射和渲染。

这种方式可以实现高效的视频渲染,适用于需要自定义视频处理的应用场景。

回到顶部