有没有人知道在iOS上制作YouTube视频截图的工作解决方案?标准的“UIView to UIImage”解决方案(如快照当前图形上下文或视图层)不起作用,因为我只有一个带有Youtube徽标的黑色空视频播放器,没有实际视频。
我尝试对视图的presentationLayer进行快照,但后来我收到了BAD_ACCESS错误。我听说它与UIWebView中的CSS / HTML5有关(用于显示youtube播放器)。
有没有人成功呢?
答案 0 :(得分:0)
Bartek Uchanski,再次感谢你,你的回答指出了我正确的方向。
对于我的特定应用程序,我仍然需要依靠Google的YouTube iOS Player Helper API进行视频播放,但要提取缩略图(这似乎不可能直接使用Google YouTube API)我加载了一个单独的& #34;阴影"来自YouTube的mp4流,依靠XCDYouTubeClient库和AVAsset / AVFoundation框架来提取和保存缩略图。 (不幸的是[player thumbnailImageAtTime:]已被弃用,因此我的解决方法如下。)
1)使用XCDYouTubeClient API提取例如来自YouTube 11字符视频标识符的mp4视频流网址;你也可以解析YouTube视频的HTML页面以获得相同的流URL,但我发现它(更多)更容易使用XCDYouTubeClient API。
2)一旦您检索到视频流的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; e.g. itag=160 mp4 video only, 256x144
if (video.streamURLs[[NSNumber numberWithInt:160]]) {
// grab thumbnail from specified video stream @ specified time, e.g. @ 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);
}
}
}];