2015-11-07 34 views
0

我们有一个适用于iOS平台的VoIP应用程序。我们在哪里使用TPCircularBuffer进行音频缓冲,并且性能非常好。如何使用TPCircularBuffer进行视频?

所以我想知道是否有可能使用TPCircularBuffer视频缓冲也。我搜索了很多,但没有发现任何有用的“使用TPCircularBuffer的视频”。这甚至有可能吗?如果是,那么任何人都可以遮挡一些光线?任何代码示例都将受到高度赞赏。

回答

1

我想你可能复制您的视频帧的像素为TPCircularBuffer,和你在技术上有一个视频环形缓冲区,但你已经失去了效率的比赛在这一点上,因为你没有时间去复制那么多数据。你需要保留对你的帧的引用。

或者,如果你真的捣烂溶液注入到TPCircularBuffer,你可以在CMSampleBuffer指针写入缓冲区(仔细尊重保留和释放)。但是这看起来很沉重,因为你真的没有从TPCircularBuffer的神奇内存映射包装中获得任何东西,因为指针非常小。

我只是做我自己的CMSampleBufferRef环形缓冲区。您可以grab a prebuilt circular buffer还是时钟算术自己:

CMSampleBufferRef ringBuffer[10]; // or some other number 

ringBuffer[(++i) % 10] = frame; 

当然你真正的问题不是环形缓冲区本身,而是处理与压缩的视频其实是非常高的带宽,例如每帧1080p为8MB,或者200MB以每秒24帧的速度存储1秒,所以如果你需要其他任何东西而不是微观视频缓冲区,你将不得不非常有创意。

几点建议:

  • 上面的数字是RGBA,所以尝试在YUV,其中数量变得3MB和75MB/s的
  • 尝试较低的分辨率工作