2017-09-06 8 views
0

iOS上でYouTubeビデオのスクリーンショットを作成するための実用的なソリューションを知っている人はいますか?現在のグラフィックコンテキストやビューのレイヤーをスナップショットするなどの標準的な「UIView to UIImage」ソリューションは、実際のビデオなしで、Youtubeのロゴ付きの黒い空のビデオプレーヤーだけを取得するので、機能しません。Youtube YTPlayerViewから現在のフレームを取得

私はビューのpresentationLayerをスナップショットしようとしましたが、次にBAD_ACCESSエラーが発生しました。 UIWebView(YouTubeプレーヤーを表示するために使用される)内のCSS/HTML5と関係があると聞きました。

それに成功した人はいますか?

+0

私は同じ問題に遭遇してきた、すなわち現在のビデオフレームの画面のスナップをつかむしようとしていますUIImageと私が見つけて試したすべてのソリューションは、デバイス上で黒いフレームを生成します(シミュレータ上では動作しますが、デバイス上では動作しません)。同じ質問をしている2つのURL(これに加えて)が2つありますが、誰も解決策がないようです: https://github.com/youtube/youtube-ios-player-helper/issues/60 https ://stackoverflow.com/questions/32095532/screenshot-of-my-app-shows-blank-youtube-video 解決策はありますか? –

+1

このフレームワークをお試しください: https://cocoapods.org/pods/XCDYouTubeKit YouTube動画をMPMoviePlayerControllerに読み込むカスタムライブラリです。次に、方法[player thumbnailImageAtTime:]で特定のフレームをつかむことができます –

+0

これを試して報告してくれます、ありがとうございます! –

答えて

0

Bartek Uchanski、もう一度ありがとう、あなたの応答は正しい方向に私を指摘しました。

GoogleのYouTube iOS Player Helper APIをビデオ再生に使用する必要がありましたが、サムネイル(Google YouTube APIでは直接不可能と思われる)を抽出するには別の「シャドウ」mp4 XCDYouTubeClientライブラリとAVAsset/AVFoundationフレームワークの両方を利用して、サムネイル画像を抽出して保存することができます。 (残念ながら[player thumbnailImageAtTime:]は廃止されましたので、私の回避策は以下のとおりです)

1)XCDYouTubeClient APIを使用して、 YouTubeの11文字の動画IDからのmp4動画ストリームのURL。同じストリームURLのYouTube動画のHTMLページを解析することもできますが、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); 
    } 
    } 
}]; 
関連する問題