2014-02-18 3 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를 사용하는 유일한 방법이라고 생각합니다.

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 : 당신을 가정 은 AVPlayerItem에 대한 참조를 가지고있다. 이렇게하면 이미지가 스크린 샷 순간과 정확히 동일하게 유지됩니다.
  2. videoScreenshotIV는 동일한 경계에서 avplayer보기 바로 위에있는 UIImageView (contentMode scaleAspectFit)입니다. 나는 스크린 샷을 찍을 때까지이 UIImageView를 숨기고 나서 먼저 숨김을 해제하고 이미지를 설정 한 다음 스크린 샷을 찍은 다음 다시 숨 깁니다. 그것은 완벽하게 작동합니다! :)