2013-03-12 37 views
13

AVPlayerを実装しました。ツールバーボタンをクリックして画像またはサムネイルを表示し、UIViewControllerUIImageViewを開きます。イメージはAVPlayerとまったく同じようにスケーリングする必要があります。 segueは既に動作しています。私はそれを実装するだけで、現在の再生時間でイメージを取得する必要があります。現在のAVPlayerのサムネイルまたは画像を作成する

ありがとうございます!

答えて

34

AVAsset *asset = [AVAsset assetWithURL:sourceURL]; 
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset]; 
CMTime time = CMTimeMake(1, 1); 
CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]; 
UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); // CGImageRef won't be released by ARC 

スウィフトのObjective-C

var asset = AVAsset.assetWithURL(sourceURL) 
var imageGenerator = AVAssetImageGenerator(asset: asset!) 
var time = CMTimeMake(1, 1) 
var imageRef = try! imageGenerator!.copyCGImageAtTime(time, actualTime: nil) 
var thumbnail = UIImage.imageWithCGImage(imageRef) 
CGImageRelease(imageRef) // CGImageRef won't be released by ARC 

スイフト3.0

var sourceURL = URL(string: "Your Asset URL") 
var asset = AVAsset(url: sourceURL!) 
var imageGenerator = AVAssetImageGenerator(asset: asset) 
var time = CMTimeMake(1, 1) 
var imageRef = try! imageGenerator.copyCGImage(at: time, actualTime: nil) 
var thumbnail = UIImage(cgImage:imageRef) 

注:あなたの迅速なバージョンに応じてスウィフトコードを解釈します。

+0

スクリーンショット自体は両方の方法で動作しますが、問題はスクリーンショットがフルスクリーンで表示され、自分のビデオと同じフォーマットではないということです。 「サムネイル」のサイズを変更する可能性はありますか? – kchromik

+1

エラーコードAVErrorOperationNotSupportedForAssetを返します。私はm3u8サーバーのURLを読み込もうとしています。 .m3u8ファイルを読み込むには – ruyamonis346

+1

を助けてください。あなたは.m3u8ストリーミングファイルを再生できるAVPlayerが必要です。 'AVPlayer 'を使って試してみてください。 –

3

は、このことができます。この

- (UIImage*)takeScreeenShot { 

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:vidURL 
options:nil]; 

AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 

imageGenerator.appliesPreferredTrackTransform = YES; 

NSError *err = NULL; 

CMTime time = CMTimeMake(1, 60); // time range in which you want 
screenshot 

CGImageRef imgRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL 
error:&err]; 

return [[UIImage alloc] initWithCGImage:imgRef]; 

} 

希望をお試しください!

+0

「imageGenerator」のためにエラーが発生します。それは宣言されていないと言います。 – kchromik

+0

tatはtypo ... nwを修正しました! –

1

スウィフト2.xの:

let asset = AVAsset(...) 
let imageGenerator = AVAssetImageGenerator(asset: asset) 
let screenshotTime = CMTime(seconds: 1, preferredTimescale: 1) 
if let imageRef = try? imageGenerator.copyCGImageAtTime(screenshotTime, actualTime: nil) { 

    let image = UIImage(CGImage: imageRef) 

    // do something with your image 
} 
+0

これは動作しますが、回転したサムネイルを取得します。 imageGenerator.appliesPreferredTrackTransform = trueを追加します。 –

0

動画からサムネイルを生成するコードの下に追加します。

AVURLAsset *assetURL = [[AVURLAsset alloc] initWithURL:partOneUrl options:nil]; 

AVAssetImageGenerator *assetGenerator = [[AVAssetImageGenerator alloc] initWithAsset:assetURL]; 

assetGenerator.appliesPreferredTrackTransform = YES; 

NSError *err = NULL; 

CMTime time = CMTimeMake(1, 2);  

CGImageRef imgRef = [assetGenerator copyCGImageAtTime:time actualTime:NULL error:&err]; 

UIImage *one = [[UIImage alloc] initWithCGImage:imgRef];  
関連する問題