| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 个月前 | ||
| 8 个月前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 8 个月前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 10 个月前 |
渲染视频数据
项目简介
本示例适用于视频解码后的视频画面直通到Vulkan环境中渲染送显。本示例帮助开发者实现自定义播放器开发,了解视频解码到渲染的全流程。
效果预览
如下图所示, 打开应用, 可以点击'播放'按钮会将内置的sample.mp4绘制一个上方的XComponent组件上。

使用说明
点击播放即可渲染播放视频。
工程目录
├───entry/src/main/cpp
│ ├───capbilities
│ │ ├───include
│ │ │ ├───SampleInfo.h // 视频样本
│ │ │ ├───SampleCallback.h // 视频回调
│ │ │ ├───Demuxer.h // 媒体解析
│ │ │ └───VideoDecoder.h // 视频解码
│ │ └───src
│ │ ├───SampleCallback.cpp // 视频回调
│ │ ├───Demuxer.cpp // 媒体解析
│ │ └───VideoDecoder.cpp // 视频解码
│ ├───player
│ │ ├───include
│ │ │ └───Player.h // 视频播放
│ │ ├───src
│ │ │ └───Player.cpp // 视频播放
│ └───render
│ ├───include
│ │ ├───PluginManager.h // XComponent管理
│ │ ├───PluginRender.h // 渲染管理
│ │ ├───VulkanRender.h // Vulkan渲染上下文
│ │ └───VulkanRenderThread.h // Vulkan渲染线程
│ └───src
│ ├───PluginManager.cpp // XComponent管理
│ ├───PluginRender.cpp // 渲染管理
│ ├───VulkanRender.cpp // Vulkan渲染上下文
│ └───VulkanRenderThread.cpp // Vulkan渲染线程
├───entry/src/main/ets
│ ├───entryability
│ │ └-──EntryAbility.ets // 主Ability的生命周期回调内容
│ ├───entrybackupability
│ │ └───EntryBackupAbility.ets // Ability的生命周期回调内容
│ └───pages
│ ├───Index.ets // 首页
└───entry/src/main/resources // 资源目录
具体实现
基于Vulkan渲染视频
- 创建渲染子线程,在启动子线程时,加载Vulkan的动态链接库。
- 创建NativeImage对象,并根据NativeImage获取NativeWindow对象。
- 在XComponent创建时,通过回调函数OnSurfaceCreatedCB获取对应的NativeWindow对象,Vulkan通过XComponent的NativeWindow对象创建Surface。
- 实现编解码器的基本功能,包括解封装器、解码器等。
- 实现播放功能,启动输入子线程、输出子线程。
- 在解码输入子线程中,通过解封装器读取视频数据,并提交给解码器。
- 在解码输出子线程中,将解码后的数据提交给输出Surface,即NativeImage的NativeWindow对象。
- 在NativeImage有可用数据后,通过OH_NativeImage_AcquireNativeWindowBuffer()获取视频数据,并通过OH_NativeBuffer_FromNativeWindowBuffer()转化为NativeBuffer的类型。
- Vulkan获取到NativeBuffer后,将格式转化为RGBA后进行渲染显示。
相关权限
不涉及
依赖
本示例不依赖其他sample。
约束与限制
- 本示例要求设备底层驱动已实现Vulkan API接口, rk开发板目前不支持(需厂商驱动实现)。
- 本示例基于OpenHarmony API 12 SDK(5.0.0.71)。
- 新建一个Native C++工程;
- 将本工程AppScope/resources/rawfile目录拷贝至新工程AppScope/resources目录下;
- 删除新工程entry/src目录, 将本工程entry目录下所有文件拷贝至新工程的entry目录下。
- 本示例需要使用DevEco Studio版本号(5.0 Release)及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/BasicFeature/Native/NdkVulkanExternalMemory/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master