从Youtube YTPlayerView获取当前帧

时间:2017-09-06 21:03:04

标签: ios objective-c youtube screenshot ytplayerview

有没有人知道在iOS上制作YouTube视频截图的工作解决方案?标准的“UIView to UIImage”解决方案(如快照当前图形上下文或视图层)不起作用,因为我只有一个带有Youtube徽标的黑色空视频播放器,没有实际视频。

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

有没有人成功呢?

1 个答案:

答案 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);
    }
  }
}];