iOS上的视频帧可以使用循环缓冲区吗?

iOS上的视频帧可以使用循环缓冲区吗?,ios,video,Ios,Video,我目前正在寻找一种在iOS中创建类似“实时照片”的功能的方法,但使用视频。目标是让应用程序在开始拍摄视频之前存储几秒钟的帧。我认为循环缓冲区在这里很有用,但我看到的大多数库都只用于音频。鉴于live photos功能是iPhone 6S独有的,我想知道这样的功能是否可以在内存量相等的设备上实现,例如iPad Air 2,或者在内存较小的设备上实现,例如iPhone 6。理论上,可以存储和循环视频,但在实践中,你会发现它不太可能以每秒30帧这样的快帧速率为全屏视频工作。问题是用于视频的内存总量。每

我目前正在寻找一种在iOS中创建类似“实时照片”的功能的方法,但使用视频。目标是让应用程序在开始拍摄视频之前存储几秒钟的帧。我认为循环缓冲区在这里很有用,但我看到的大多数库都只用于音频。鉴于live photos功能是iPhone 6S独有的,我想知道这样的功能是否可以在内存量相等的设备上实现,例如iPad Air 2,或者在内存较小的设备上实现,例如iPhone 6。

理论上,可以存储和循环视频,但在实践中,你会发现它不太可能以每秒30帧这样的快帧速率为全屏视频工作。问题是用于视频的内存总量。每个像素是32位数据(RGBX)。每个像素基本上是一个字,您需要乘以W x H来计算给定相机分辨率的大小。长话短说,对于非常大的W和H,CPU和内存总线的数据太多,无法跟上读写速度。现在,iOS设备确实有硬件来帮助完成这项任务,例如,您可以使用内置硬件对电影进行编码,但这可能是在处理非常大的W x H值和快速帧速率时使其工作的唯一方法。您还必须注意纵横比,因为您的相机可能会以h.264编码硬件不支持的纵横比拍摄图片。

很久以前,我正在为iOS开发汽车DVR/dashcam应用程序。这是必要的,以节省多达30分钟的最近的视频,它显然是不可能存储在RAM中

通过将视频写入所需长度的文件,然后写入第二个文件,然后再次切换到第一个文件(覆盖),依此类推,任务得以解决。通过这样的过程,我可以在任何时候从这两个文件中剪切并粘贴最新的30分钟

正如我所记得的,性能没有问题


也许这种方法对你有用。

我想这是我的同事们的共识。他们担心记忆。我想知道VGA是否有可能。另一件事是,如果我们只将帧发送到缓冲区,并且视频是使用苹果API提供的功能录制的,那么我们如何整合预捕获的帧?关于内存使用情况,您可以使用计算器和一些手工计算非常容易地计算内存总量。我写了一篇关于这个特定主题的博客文章,链接到这个答案:这是一个很好的资源。谢谢我目前正在研究AVAsset和AVAssetWriter。在我们的例会上,我的同事一致认为,为视频设置循环缓冲区是毫无意义的,因为它带来的问题多于解决方案。请注意,这基本上就是CVPixelBufferPoolCreatePixelBuffer()在CoreVideo中所做的。如果您愿意,您当然可以直接给我发电子邮件,但是,一个长时间的聊天式的讨论,所以是一种不赞成的主持人。对您的问题的一个简短回答是,缓冲池基本上是应用程序中要使用的缓冲区的“来源”,这是一种特定视频帧的循环缓冲池,可以扩展,同时还可以重用返回到缓冲池中的缓冲区。