2013-10-16 33 views
1

我試圖使用GPUImage庫將圖像添加到視頻的每個幀,但無法使其工作。出於某種原因,處理後的視頻僅包含原始視頻,而沒有圖像疊加層。我究竟做錯了什麼?使用GPUImage將圖像添加到視頻

GPUImagePicture *overlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"overlayimage"] smoothlyScaleOutput:YES]; 
[overlay processImage]; 

GPUImageMovie *movie = [[GPUImageMovie alloc] initWithURL:[THE URL TO THE VIDEO ASSET]]; 
movie.delegate = self; 
movie.runBenchmark = YES; 
movie.playAtActualSpeed = YES; 

self.movieView = [[GPUImageView alloc] initWithFrame:self.bounds]; 
self.movieView.fillMode = kGPUImageFillModePreserveAspectRatio; 
[self addSubview:self.movieView]; 

GPUImageAlphaBlendFilter *filter = [[GPUImageAlphaBlendFilter alloc] init]; 
[movie addTarget:filter atTextureLocation:0]; 
[overlay addTarget:filter atTextureLocation:1]; 
[filter prepareForImageCapture]; 

[filter addTarget:self.movieView]; 

[movie startProcessing]; 

回答

7

下面是解決方案,如果有人遇到同樣的問題:您必須保留GPUImagePicture,GPUImageMovie和GPUImageView對象,例如將它們存儲在屬性中。否則,它們將在方法或runloop結束時在ARC下發布。

+2

我花了同樣令人沮喪的30分鐘一天完全相同的問題。在一個方法的中間創建了一個過濾器,我將這個過濾器添加到了以前的功能混合中,忘記確保我的新過濾器的範圍超出了方法範圍。我感到你的痛苦! –

+0

嗨,我有同樣的問題,你可以發佈請你如何解決?非常感謝! – swifferina

+1

你能分享你的代碼嗎?我有同樣的問題。 – Allan

0

有兩件事情可以嘗試:

  1. 別叫processImage來覆蓋上後,才您指定的alpha混合過濾器。我會在之前或之後嘗試使用電影上的startProcessing。

  2. 當您定位AlphaBlendFilter時,不要擔心指定textureLocation。你可以調用addTarget並讓混合物將其排除。

這些都是我的頭頂,我實際上將在今晚工作後測試它們。