【问题标题】:iOS 7 blur effect on videoPlayeriOS 7 对 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。它根本不工作。始终为黑色图像。

标签: ios7 blur video-player


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

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2015-09-09
    • 2013-06-06
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多