【发布时间】:2013-03-21 06:01:09
【问题描述】:
我有一个有趣的问题需要研究,与非常低级的视频流相关。
有没有人将原始字节流(分隔为每个像素信息,但不是标准的视频格式)转换为低分辨率视频流的经验?我相信我可以将数据映射为每像素字节的 RGB 值,因为与原始数据中的值对应的颜色值将由我们确定。我不确定从那里去哪里,或者每个像素需要什么 RGB 格式。
我查看过 FFMPeg,但它的文档非常庞大,我不知道从哪里开始。
我的具体问题包括,是否可以使用该像素数据创建 CVPixelBuffer?如果我要这样做,我需要将每像素数据转换为哪种格式?
另外,我是否应该更深入地研究 OpenGL,如果是的话,在哪里可以找到有关该主题的信息的最佳位置?
CGBitmapContextCreate 怎么样?例如,如果我使用this 之类的东西,典型的像素字节需要是什么样的?这是否足以将帧速率保持在 20fps 以上?
编辑:
我认为在你们两个的出色帮助下,再加上我自己的一些研究,我已经制定了如何构建原始 RGBA 数据的计划,然后从该数据构建一个 CGImage,进而创建一个 CVPixelBuffer从这里CVPixelBuffer from CGImage的那个CGImage。
但是,要在数据输入时实时播放,我不确定我会看到什么样的 FPS。我是否将它们绘制到 CALayer,或者是否有一些与 AVAssetWriter 类似的类,我可以在附加 CVPixelBuffers 时使用它来播放它。我的经验是使用 AVAssetWriter 将构建的 CoreAnimation 层次结构导出到视频,因此视频总是在开始播放之前构建,而不是显示为实时视频。
【问题讨论】:
-
深入了解 AVFoundation,尤其是 AVAssetWriter。阅读该文档后,一个好的起点可能是“How do I export an UIImage array as a movie”。
-
我已经用 AVAssetWriter 做了很多工作,但我目前的问题是我不知道如何构造原始像素数据。
-
确实是这个问题。您必须弄清楚如何使用从流中接收到的原始数据构建像素缓冲区。这将取决于传入数据的格式、编码等。完成后,请检查@Till 推荐的帖子和 AVAssetWritter。这可能有助于 CVPixelBufferRef buffer = (CVPixelBufferRef)[self pixelBufferFromCGImage:theImage size:CGSizeMake(image.size.width, image.size.height)]; if (buffer) { if(![适配器 appendPixelBuffer:buffer withPresentationTime:CMTimeMake(frame, fps)]){
-
我在评论中添加了更多信息,然后由于篇幅原因不得不将其添加到答案中。谢谢你们,我越来越近了,但我还有几个问题。
标签: ios video encoding opengl-es core-video