2014-02-18 106 views
1

我想在視頻播放器上製作模糊效果。 因此,我使用AVPlayer播放視頻,並且每當我想要將視頻分享給社交,共享視頻播放器上的窗口顯示時。只是我想要應用模糊效果來共享窗口的背景。iOS 7對videoPlayer的模糊效果

renderContext函數不渲染AVPlayer的圖層。但是我看到蘋果的新API drawViewHierarchyInRect將渲染特定的圖層,如視頻播放器或OpenGL圖層。

因此,我使用drawViewHierarchyInRect,它在模擬器上也能正常工作,但不能在設備上工作。

有什麼想法?

- (UIImage *)snapshotOfVideoPlayer 
{ 
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 1.0); 
    [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 
+0

是哪個設備?模糊效果/動畫是否停止(效率)? – Larme

+0

你能顯示你的代碼嗎? – Raptor

+0

感謝您的快速回復。設備是具有iOS 7的iPad4,它根本不起作用。總是黑色的圖像。 – liwen

回答

0

我相信唯一的方法是使用AVAssetImageGenerator。 假設你有你的AVPlayerItem參考:

AVURLAsset *asset = (AVURLAsset *)self.playerItem.asset; 
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
CGImageRef thumb = [imageGenerator copyCGImageAtTime:self.playerItem.currentTime 
                actualTime:NULL 
                 error:NULL]; 
self.videoScreenshotIV.image = [UIImage imageWithCGImage:thumb]; 
  1. 通知的self.playerItem.currentTime。這將確保圖像與截圖時刻完全相同。
  2. videoScreenshotIV是一個UIImageView(contentMode scaleAspectFit),它直接在avplayer視圖上具有完全相同的邊界。我隱藏這個UIImageView直到我需要截圖,然後我首先取消隱藏並設置圖像,然後截取屏幕截圖,然後再隱藏它。它完美的工作! :)