iOS4:我如何使用video文件作为OpenGL纹理?

我试图在OpenGL中将video文件的内容(现在我们只是说没有audio)显示在UV映射的3D对象上。 我已经在OpenGL中做了相当多的工作,但不知道从哪里开始处理video文件,而且大部分的例子似乎都是从摄像头获取video帧,这不是我所追求的。

目前,我觉得如果我可以得到CGImageRef我将设置video的个别帧,所以我想知道如何做到这一点? 也许有更好的方法来做到这一点? 我应该从哪里开始,在iOS上进行video播放的最直接的文件格式是什么? .mov格式?

道歉; 在iPhone上打字,所以我会简短一点。

用video的URL创build一个AVURLAsset – 如果你喜欢,可以是一个本地文件的URL。 QuickTime可以做的任何事情都很好,所以H.264中的MOV或M4V可能是最好的来源。

查询资产AVMediaTypeVideotypes的轨道。 你应该只有一个,除非你的源video有多个像这样的摄像机angular度,所以只需要objectAtIndex:0应该给你你想要的AVAssetTrack。

用它来创build一个AVAssetReaderTrackOutput。 可能你想指定kCVPixelFormatType_32BGRA。

使用资产创buildAVAssetReader; 附加资产读取器轨道输出作为输出。 并调用startReading。

此后,您可以在轨道输出上调用copyNextSampleBuffer以获取新的CMSampleBuffers,使您处于相同的位置,就像从摄像机进行input一样。 所以你可以locking它来获取像素内容,并通过苹果的BGRA扩展将它们推送到OpenGL。

您可能将不得不使用播放器图层,并将其内容平铺到位图上下文中。 请参阅AVPlayerLayer的文档。 虽然performance可能很差。