iOS 7模糊了对videoPlayer的影响

时间:2014-02-18 08:46:43

标签: ios7 blur video-player

我想在视频播放器上制作模糊效果。 因此,我使用AVPlayer播放视频,每当我想将视频分享到社交,分享视频播放器上的窗口显示。只是我想应用模糊效果来分享窗口的背景。

renderContext函数不呈现AVPlayer的图层。但我看到Apple的新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;
}

1 个答案:

答案 0 :(得分: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,直到我需要截取屏幕截图,然后我首先取消隐藏它并设置图像,然后截取屏幕截图然后再次隐藏它。它完美无缺! :)