我正在尝试将视频文件的内容(现在只说没有音频)显示在OpenGL中的UV映射3D对象上。我在OpenGL中做了很多,但不知道在视频文件处理方面从哪里开始,大多数示例似乎都是从摄像机获取视频帧,这不是我想要的。
目前我觉得如果我可以将CGImageRef中的单个视频帧设置好,那么我想知道如何做到这一点?也许甚至有更好的方法来做到这一点?我应该从哪里开始,iOS上视频播放最直接的文件格式是什么? .mov格式?
答案 0 :(得分:32)
道歉;在iPhone上打字所以我会有点简短。
使用视频的网址创建AVURLAsset - 如果您愿意,可以是本地文件网址。 QuickTime可以做的任何事都很好,因此H.264中的MOV或M4V可能是最好的来源。
查询资产以查找AVMediaTypeVideo类型的曲目。除非您的源视频具有类似的多个摄像机角度,否则您应该只获得一个,因此只需使用objectAtIndex:0就可以为您提供所需的AVAssetTrack。
使用它来创建AVAssetReaderTrackOutput。可能你想指定kCVPixelFormatType_32BGRA。
使用资产创建AVAssetReader;将资产阅读器轨道输出附加为输出。并致电startReading。
此后,您可以在轨道输出上调用copyNextSampleBuffer以获取新的CMSampleBuffers,使您处于与从摄像机获取输入相同的位置。所以你可以锁定它来获取像素内容并通过Apple的BGRA扩展将它们推送到OpenGL。
答案 1 :(得分:-1)
您可能不得不使用播放器图层并将其内容展平为位图上下文。请参阅AVPlayerLayer的文档。但性能可能非常差。