AVPlayer
を実装しました。ツールバーボタンをクリックして画像またはサムネイルを表示し、UIViewController
でUIImageView
を開きます。イメージはAVPlayer
とまったく同じようにスケーリングする必要があります。 segue
は既に動作しています。私はそれを実装するだけで、現在の再生時間でイメージを取得する必要があります。現在のAVPlayerのサムネイルまたは画像を作成する
ありがとうございます!
AVPlayer
を実装しました。ツールバーボタンをクリックして画像またはサムネイルを表示し、UIViewController
でUIImageView
を開きます。イメージはAVPlayer
とまったく同じようにスケーリングする必要があります。 segue
は既に動作しています。私はそれを実装するだけで、現在の再生時間でイメージを取得する必要があります。現在のAVPlayerのサムネイルまたは画像を作成する
ありがとうございます!
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)
注:あなたの迅速なバージョンに応じてスウィフトコードを解釈します。
は、このことができます。この
- (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];
}
希望をお試しください!
「imageGenerator」のためにエラーが発生します。それは宣言されていないと言います。 – kchromik
tatはtypo ... nwを修正しました! –
スウィフト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
}
これは動作しますが、回転したサムネイルを取得します。 imageGenerator.appliesPreferredTrackTransform = trueを追加します。 –
動画からサムネイルを生成するコードの下に追加します。
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];
スクリーンショット自体は両方の方法で動作しますが、問題はスクリーンショットがフルスクリーンで表示され、自分のビデオと同じフォーマットではないということです。 「サムネイル」のサイズを変更する可能性はありますか? – kchromik
エラーコードAVErrorOperationNotSupportedForAssetを返します。私はm3u8サーバーのURLを読み込もうとしています。 .m3u8ファイルを読み込むには – ruyamonis346
を助けてください。あなたは.m3u8ストリーミングファイルを再生できるAVPlayerが必要です。 'AVPlayer 'を使って試してみてください。 –