我有一个YUV数据流(来自视频文件)我希望实时流式传输到屏幕。 (基本上,我想编写一个实时播放视频的程序。)
因此,我正在寻找一种将YUV数据发送到屏幕的便携方式。我理想的是喜欢使用便携式设备,所以我不必为每个主要平台重新实现它。
我找到了一些选项,但所有选项似乎都有重大问题。他们是:
这显然不会起作用,因为在CPU上将RGB转换为YUV对于实时显示图像来说太慢了。
这个问题是我已经在我的程序的其他方面使用跨平台小部件库(例如播放控件)。据我所知,SDL只在其开启(possibly borderless)窗口中打开。理想情况下,我希望我的控件和绘图上下文位于同一窗口中。我可以用opengl做什么,但不能用SDL做。
虽然这种方法很聪明,但似乎这两个窗口很容易脱离,使用户体验不理想。
虽然这不是跨平台,但这是一个很好的解决方案。
因此,有没有什么好方法可以将YUV数据绘制到理想情况下的屏幕:
- 便携式(至少对主要平台而言)。
- 足够快到实时。
- 允许在同一窗口中显示其他小部件。
醇>
答案 0 :(得分:1)
使用选项编号2.在着色器中进行YUV到RGB转换没有问题。没有其他的便携式"这样做的方法。
这样想:不管"多大或多小"您的视频是,片段着色器(转换完成的位置)将在显示时按像素执行,因此您可以使用全屏或大屏幕的小视频,计算(对于着色器)是相同的,因为它们显示相同数量的像素。
正常条件下的任何视频卡都可以毫无问题地运行这种着色器。