目前需要在 RK3568 上播放多路视频,比如 16 路 720P 视频。总结了以下几种方案。
1. 使用 libyuv 将 YUV 转成 RGB 后播放。优点是 libyuv 可以调用各个平台的 SIMD 硬件加速进行转码,可以在自己的电脑上调试好之后再烧录。
2. 使用 rga 将 YUV 转成 RGB 后播放。性能比 libyuv 高,但仅支持瑞芯微平台,需要烧录之后才能调试。
3. 使用 OpenGL 将 YUV 转成 RGB 后播放。优点是可以利用闲置的 GPU 资源,不增加 CPU 负担,但有爆显存的风险(遇到过几次)。也许可以增加显存来解决,但没有实操过。
最近在看使用 DRM/Wayland 直接播放 YUV,但是不知道怎么和 Qt 结合起来,因为需要用到 Qt 的按钮、输入框、菜单这些控件。因为 Wayland/DRM 是支持支持 YUV 的格式的,使用 gstreamer 的多路 waylandsink 播放视频可以观察到 CPU 的占用只有方案一的三分之二。
至于 Wayland/DRM 是怎么支持 YUV 的,目前还不清楚,推测也是转成 RGB,但应该在内存拷贝等方面有优势。
离线