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
您参考这个链接: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结合,可以实现高效的视频渲染。
具体实现步骤如下:
-
创建
videoOutput实例:首先需要创建一个videoOutput实例,用于处理视频数据的输出。可以通过VideoOutput类来创建实例,并配置相关的参数,如视频格式、分辨率等。 -
配置OpenGL上下文:在鸿蒙系统中,OpenGL的上下文可以通过
EGL来管理。需要创建一个EGLDisplay,并配置EGLConfig和EGLContext,以便在OpenGL中进行渲染。 -
绑定
videoOutput到OpenGL:通过videoOutput的接口,可以将视频数据绑定到OpenGL的纹理中。可以使用videoOutput的getSurface()方法获取一个Surface对象,然后通过EGL将这个Surface与OpenGL的纹理绑定。 -
渲染视频帧:在OpenGL的渲染循环中,可以通过
videoOutput获取视频帧数据,并将其渲染到屏幕上。可以使用glTexImage2D将视频帧数据上传到OpenGL的纹理中,然后通过着色器进行渲染。 -
释放资源:在不需要渲染时,需要释放相关的资源,包括
videoOutput实例、OpenGL上下文以及纹理等。
通过以上步骤,可以在HarmonyOS鸿蒙Next中使用videoOutput作为OpenGL的数据生产者,实现高效的视频渲染。
在HarmonyOS鸿蒙Next中,videoOutput可以作为OpenGL的数据生产者,用于实现视频渲染。通过videoOutput获取视频帧数据,并传递给OpenGL进行渲染。具体步骤包括:
- 创建
videoOutput实例并绑定视频源; - 通过
videoOutput获取视频帧数据; - 使用OpenGL的纹理对象绑定视频帧数据;
- 在OpenGL渲染循环中进行纹理映射和渲染。
这种方式可以实现高效的视频渲染,适用于需要自定义视频处理的应用场景。

