iOS 7 对 videoPlayer 的模糊效果

Posted

技术标签:

【中文标题】iOS 7 对 videoPlayer 的模糊效果【英文标题】:iOS 7 blur effect on videoPlayer 【发布时间】:2014-02-18 08:46:43 【问题描述】:

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

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;

【问题讨论】:

是哪个设备?模糊效果/动画是否停止(为了提高效率)? 你能出示你的代码吗? 感谢您的快速回复。设备是装有 ios 7 的 iPad4。它根本不工作。始终为黑色图像。 【参考方案1】:

我相信唯一的方法是使用 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];
    注意 self.playerItem.currentTime。这将确保图像与屏幕截图的时刻完全相同。 videoScreenshotIV 是一个 UIImageView (contentMode scaleAspectFit),它直接位于具有完全相同边界的 avplayer 视图之上。我隐藏这个 UIImageView 直到我需要截屏,然后我首先取消隐藏并设置图像,然后截屏然后再次隐藏它。它完美地工作! :)

【讨论】:

以上是关于iOS 7 对 videoPlayer 的模糊效果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableViewCell 后台实现实时 iOS 7 模糊效果

iOS 7 导航栏背景模糊效果在 iPhone 4 中不起作用

iOS 7 TableView 中的 ViewController 和 NavigationBar 模糊效果

如何在 iOS 7 中将用户背景添加到具有模糊效果的应用程序中?

iOS View 模糊效果(毛玻璃)

使用 Swift 对 ImageView 的 iOS 模糊效果