将原始数据转换为iOS的可显示视频

Mat*_*ley 4 video encoding opengl-es core-video ios

我有一个有趣的问题,我需要研究与非常低级别的视频流.

有没有人有过将原始字节流(分成每像素信息,但不是标准格式的视频)转换为低分辨率视频流的经验?我相信我可以将数据映射到每像素字节的RGB值,因为与原始数据中的值对应的颜色值将由我们确定.我不知道从那里去哪里,或者每个像素需要RGB格式.

我看过FFMPeg,但它的文档很大,我不知道从哪里开始.

我所包含的具体问题是,是否可以使用该像素数据创建CVPixelBuffer?如果我这样做,我需要转换为每像素数据的格式是什么?

另外,我是否应该更深入地研究OpenGL,如果是这样,哪里可以找到有关此主题的信息的最佳位置?

那么CGBitmapContextCreate呢?例如,如果我去了,我就是这样的,一个典型的像素字节需要看起来像什么?这是否足够快以保持帧速率高于20fps?

编辑:

我认为在你们的帮助下,以及我自己的一些研究,我已经制定了一个如何构建原始RGBA数据的计划,然后根据该数据构建CGImage,从而创建一个来自CGImage的CVPixelBuffer来自CGImage的CVPixelBuffer.

然而,为了在数据进入时播放,我不确定我会看到什么样的FPS.我是否将它们绘制到CALayer,或者是否有类似AVAssetWriter的类,我可以使用它来添加CVPixelBuffers.我的经验是使用AVAssetWriter将构建的CoreAnimation层次结构导出到视频,因此视频总是在开始播放之前构建,而不是显示为实时视频.

Bra*_*son 5

我以前做过这个,我知道你刚刚找到了我的GPUImage项目.当我回答那里的问题时,GPUImageRawDataInput就是你想要的,因为它可以将RGBA,BGRA或RGB数据直接快速上传到OpenGL ES纹理中.从那里,帧数据可以被过滤,显示到屏幕或记录到电影文件中.

根据我的个人经验,您建议的通过CGImage到CVPixelBuffer的路径不会产生非常好的性能.通过Core Graphics获取实时视频时会产生太多开销.您想在这里以最快的显示速度直接进入OpenGL ES.

我甚至可以改进我的代码,使其比现在更快.我目前用来glTexImage2D()从本地字节更新纹理数据,但是使用iOS 5.0中引入的纹理缓存来加速刷新维护其大小的纹理内的数据可能会更快.设置缓存有一些开销,这使得它们对于一次性上传来说有点慢,但快速更新数据应该更快.