我有一个有趣的问题,我需要研究与非常低级别的视频流相关的问题。将原始数据转换为适用于iOS的可显示视频
有没有人有任何经验转换成一个低分辨率视频流的原始字节流(分成每个像素信息,但不是标准格式的视频)?我相信我可以将数据映射为每像素字节的RGB值,因为与原始数据中的值对应的颜色值将由我们确定。我不知道该从哪里出发,或者每个像素需要RGB格式。
我看过FFMPeg,但它的文档很庞大,我不知道从哪里开始。
我所包含的具体问题是否可以用该像素数据创建CVPixelBuffer?如果我这样做,我需要将每像素数据的格式转换为什么格式?
此外,我是否应该更深入地研究OpenGL,如果是的话,哪里可以找到关于此主题的信息?
CGBitmapContextCreate呢?例如,如果我去了,我去了this,典型的像素字节需要看起来像什么?这是否足够快以保持帧率高于20fps?
编辑:
我想与你两个优秀的帮助,并以我个人的一些更多的研究,我已经把如何构建原始RGBA数据,然后构建一个CGImage计划从这些数据开始,从这个CVPixelBuffer from CGImage的CGImage中创建一个CVPixelBuffer。
但是,要在数据进入时播放那些数据,我不确定我会看到什么样的FPS。我将它们绘制到CALayer,还是有一些类似于AVAssetWriter的类,我可以在添加CVPixelBuffers时使用它来播放它。我拥有的经验是使用AVAssetWriter将构建的CoreAnimation层次结构导出到视频,因此视频总是在开始播放之前构建的,而不是作为实时视频显示。
有一个deeeeeeeeep看AVFoundation,尤其是AVAssetWriter。阅读完该文档后,一个好的起点可能是“[如何将UIImage数组导出为电影](http://stackoverflow.com/questions/3741323/how-do-i-export-uiimage-array-as -a-电影/ 3742212)”。 – Till
我已经使用AVAssetWriter完成了相当多的工作,但是目前的问题是我不知道如何构建原始像素数据。 –
确实是这个问题。您必须弄清楚如何使用您从流中接收的原始数据构建像素缓冲区。这将取决于传入数据的格式,编码等。一旦你有了,请检查@Till推荐的推荐和AVAssetWritter。这可能有帮助 CVPixelBufferRef buffer =(CVPixelBufferRef)[self pixelBufferFromCGImage:theImage size:CGSizeMake(image.size.width,image.size.height)]; if(buffer) if(![adapter appendPixelBuffer:buffer withPresentationTime:CMTimeMake(frame,fps)]){ –