使用SOUI播放视频

播放视频是一个常规需求。

如果将每一个视频帧转换成rgb格式,再使用gdi贴图,效率会很低,只能适合分辨率很低的视频,1080P全屏软渲染一般的电脑都撑不住。

因此渲染视频通常需要启用硬件渲染。开启硬件渲染需要一个视频窗口对象,该窗口专门用来渲染视频,因此该窗口和DUI界面元素很难融合。

业务上一般会有在视频窗口上显示控制视频的UI,由于这些UI元素和不方便融合到视频窗口中,常规的做法就是在视频窗口上面再浮动一个popup窗口。

使用一个popup窗口除了实现起来更复杂,效果也很难做到理想,比如在移动视频窗口的时候,要控制这些附属UI同步移动就不容易。

为了解决这个问题,SOUI4提出一种将SOUI元素和视频一起渲染的方案。

实现其实很简单,SOUI元素渲染后会保存到一个内存位图里,常规的渲染情况下,会将这个内存位图使用GDI贴图接口帖到SOUI的宿主窗口上。

在渲染视频时,不直接贴图,而是通过这个内存位图创建硬件渲染需要的Texture,然后再提交到硬件渲染接口中。

每当内存位图数据发生变化,就同步更新这个Texture即可。

demo代码:soui4-demo/SdlPlayer (github.com)

注意该demo依赖最新的soui4代码:soui4/soui (github.com

 

 

通过这种方式可以轻松实现高效的全屏视频播放。

 

posted @ 2022-03-21 21:58  启程软件  阅读(514)  评论(0编辑  收藏  举报