所以,布拉德拉森真棒。我使用他的GPUImage庫,因爲他優化了視頻輸出的CGContextCreateImage,而不是直接渲染OpenGL。然後他重寫它變得更加驚人,一半的問題已經過時。另一半有新的回調,Like this question,但在我的生活中,我不能讓視頻幀回調不爲零。 (CMSampleBuffer到CIImage函數)從willOutputSampleBuffer獲取圖片或相關?
我知道我必須「標記下一幀」以保存在內存中,這要感謝他的博客。我也知道我處理它(但GPUImageVideo也這樣做),然後我從幀緩衝區中抓取。仍然沒有。
應該從CGImagePicture的processImageUpToFilter函數自動將其過濾到CGImage中的捕獲命令似乎是我想要的,我已經看到它提到了,但我迷失瞭如何連接輸出到它的frameBuffer。
或者我應該使用GPUImageRawDataOutput,以及如何掛鉤?我一直在複製和粘貼,編輯,試驗,但不確定是否僅僅是我不知道openGL足以連接正確的東西或?
任何幫助表示讚賞。我不會問,因爲這裏有很多相關的問題,但我使用它們,仍然沒有輸出。
這是我目前的嘗試:
func willOutputSampleBuffer(sampleBuffer: CMSampleBuffer!) {
gpuImageVideoCamera.useNextFrameForImageCapture()
//Next line seems like a waste, as this func is called in GPUImageVideoCamera already.
gpuImageVideoCamera.processVideoSampleBuffer(sampleBuffer);
if let image = gpuImageVideoCamera.imageFromCurrentFramebuffer()
{
//it's nil
}
}
更新:我現在有這個工作,但有些奇怪。如果打開transformFilter的useNextFrameForImageCap,它會降低攝像機的速度,預覽窗口的幀速率大約爲0.2幀/秒,但是它仍然在使用transformFilter.imageFromCurrentFramebuffer的willOutput調用中封閉圖像。 videoCamera的useNext調用,我沒有工作 –