对此没有任何简单的解决方案(即我可能不知道),但您需要弄清楚。在这里,我描述了可能的解决方案。当您尝试简单地在上下文中渲染视图时,它将给出空白屏幕代替播放器,其他内容将保持原样。
我知道的可能解决方案
私有 API
您可以使用UIGetScreenImage() 功能捕获设备的整个屏幕,包括播放器及其控件。这是您可以轻松获得具有视图的播放器图像的方式。
注意:有些小伙伴说使用这个功能可能会导致申请被拒(我没用过应用商店的应用,所以没有太多经验:))。
第二种方式。
如果您想获取位于主视图或 iPhone 屏幕中的其他内容的播放器图像,那么基本想法是捕获两个图像(即一个电影播放器和另一个整个屏幕,就像您使用 UIGraphicsGetImageFromCurrentImageContext ) 并使用一些适当的计算将它们组合为一个图像。这样,您需要进行一些计算,因此准确性取决于您的计算。
在这里,我更喜欢使用AVPlayer而不是 MPMoviePlayer,我不确定我是否真实,但因为我觉得 AVPlayer 在特定时间提供了准确的帧(准确度高。屏幕上显示的准确图像。)
请将 AVPlayer 的重力模式设置为AVLayerVideoGravityResizeAspect。此模式将保留纵横比并适合图层范围(即此选项是默认选项)。你可以这样设置。
playerLayer.videoGravity = setVideoFillMode:AVLayerVideoGravityResizeAspect;
其中 playerLayer 是 AVPlayerLayer 的对象。
现在获取AVPlayerLayer的图片
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]
initWithAsset:asset];
imageGenerator.appliesPreferredTrackTransform=YES;
/*AVAssetImageGenerator will scale images such that they fit within the defined bounding box. Images will never be scaled up. So provide this should be the size of AVPlayer. */
imageGenerator.maximumSize=CGSizeMake(400, 400);
CGImageRef imgRef = [imageGenerator copyCGImageAtTime:storedCMTime actualTime:NULL error:NULL];
[imageGenerator release];
请注意,此生成的图像可能与您正在寻找的尺寸不完全相同,或者您提供的最大尺寸可能不准确,因为正如我在上面的评论中提到的,这里的图像永远不会被放大。如果图像不是您正在查看的确切大小,则使用一些图像实用程序功能根据播放器的大小缩放图像,但不要破坏纵横比,因为我们已将 AVPLayer 的模式设置为 AVLayerVideoGravityResizeAspect.store 此图像临时.
现在使用 UIGraphicsGetImageFromCurrentImageContext 捕获 View 的图像(即,就像你目前正在做的那样)。绘制我们捕获并存储在您视图上显示的黑色区域的 AVplayer 图像(即,您需要进行一些试验和错误才能获得完全相同的结果)。
在这里,我试图涵盖所有可能引起恐慌或不立即显而易见的要点。
更新:
来自 APPLE 的屏幕截图解决方案:http://developer.apple.com/library/ios/#qa/qa1703/_index.html#//apple_ref/doc/uid/DTS40010193
如果您想使用 MPMoviewPlayerController,那没关系。使用@Kuldeep 显示的代码获取缩略图。并使用 Image Masking 将 Both 视图的图像和缩略图结合起来,在这里准确解释:Link