从Youtube YTPlayerView获取当前帧

有没有人知道一个工作解决scheme,在iOS上的YouTubevideo截图? 一个标准的“UIView到UIImage”的解决scheme,如快照当前graphics上下文或一个视图层不起作用,因为我只能得到一个黑色的,带有Youtube标志的video播放器,没有实际的video。

我试图快照视图的presentationLayer,但后来我得到了BAD_ACCESS错误。 我听说它与UIWebView中的CSS / HTML5(用于显示YouTube播放器)有关。

有没有人成功了?

Bartek Uchanski,再次感谢你,你的回应指向了我的正确方向。

对于我的特定应用程序,我仍然需要依靠Google的YouTube iOS Player Helper API来进行video播放,但是要提取缩略图(这似乎不可能直接使用Google YouTube API)我从YouTube上加载了一个单独的“shadow”mp4stream,依靠XCDYouTubeClient库和AVAsset / AVFoundation框架来提取和保存缩略图图像。 (不幸的是[player thumbnailImageAtTime:]已被弃用,因此我的解决办法如下。)

1)使用XCDYouTubeClient API从YouTube 11字符video标识符中提取一个eg mp4videostreamURL; 您也可以parsingYouTubevideo的HTML页面以获取相同的streamURL,但是我发现(更简单)使用XCDYouTubeClient API更为简单。

2)一旦你检索到videostream的URL,然后使用AVAsset / AVFoundation框架提取缩略图。

(我在这里简短地介绍了我的实际应用程序代码,但总的概念如下。)

NSString *videoid = @"9bZkp7q19f0"; // youtube 11 character video identifier [[XCDYouTubeClient defaultClient] getVideoWithIdentifier:videoid completionHandler:^(XCDYouTubeVideo *video, NSError *error) { if (video) { // available youtube urls; eg itag=160 mp4 video only, 256x144 if (video.streamURLs[[NSNumber numberWithInt:160]]) { // grab thumbnail from specified video stream @ specified time, eg @ 30 secs AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:[[video.streamURLs[[NSNumber numberWithInt:160]] description] stringByRemovingPercentEncoding]]]; AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; CGImageRef imageRef = [imageGenerator copyCGImageAtTime:CMTimeMakeWithSeconds(30.0,NSEC_PER_SEC) actualTime:NULL error:NULL]; UIImage *ytvideo_thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); // save thumbnail to camera roll UIImageWriteToSavedPhotosAlbum(ytvideo_thumbnail,nil,nil,nil); } } }];