2015-11-07 32 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的
  • 嘗試較低的分辨率工作