2015-08-27 77 views
2

所以,布拉德拉森真棒。我使用他的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 
     } 
} 
+0

更新:我現在有這個工作,但有些奇怪。如果打開transformFilter的useNextFrameForImageCap,它會降低攝像機的速度,預覽窗口的幀速率大約爲0.2幀/秒,但是它仍然在使用transformFilter.imageFromCurrentFramebuffer的willOutput調用中封閉圖像。 videoCamera的useNext調用,我沒有工作 –

回答

1

似乎使用的過濾器,而是和useNextFrame後應處理不下去超慢。

裏面的willOutputSampleBuffer,就是這樣。

if let image = transformFilter.imageFromCurrentFramebuffer() 
    { 
     // image not nil now. 
    } 
    transformFilter.useNextFrameForImageCapture(); //enusre this comes after 

這給了我們驚人的速度,擊敗谷歌的P2P圖書館。布拉德,謝謝大家應該支持你的努力。