我是iOS的新手,但我在Android上实现了基于FFmpeg的播放例程。我打算在iOS上再做一次。
似乎我可以使用OpenGL ES 1.1 / 2.0从FFmpeg视频到屏幕绘制帧。但是,OpenGL ES似乎很难。此外,由于视频纹理的宽度,我遇到了一些限制。我不得不将视频帧分成许多图像并将它们绘制到屏幕上以构成帧。
在iOS上使用OpenGL ES渲染此视频有更简单的方法吗?有没有其他方法可以在iOS中快速将2-D视频帧绘制到屏幕上?
答案 0 :(得分:1)
阿。所以你想渲染一个非POT源。这可以在不分割成多个纹理的情况下完成 - 通过创建最接近的POT大小的纹理,渲染到该纹理并仅对实际包含图像的部分进行blitting。 看一下here示例(C ++)。相关部分:
//Calculating the texture size
double exp = ceil(log((double)max(Texture.HardwareHeight, Texture.HardwareWidth))/log(2.0));
texsize = min(pow(2, exp), (double)maxSize);
然后
//draw the original frame 1:1 into the (larger) texture
float ymax = min(2.0f*((float)Texture.HardwareHeight/(float)texsize) - 1.0f, 1.0f); //clamping is for cards with
float xmax = min(2.0f*((float)Texture.HardwareWidth/(float)texsize) - 1.0f, 1.0f); //smaller max hardware texture than the current frame size
在渲染时作为纹理坐标使用这些最大值而不是1.0。