21

AVFoundationのクラスを使用してビデオの最初のフレームを取得しようとしています。しかし、それはまったく画像を取得していないようです。

私のコードは現在このようになっています

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:videoPath] options:nil];
AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
UIImage* image = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]];
[videoFrame setImage:image];

ビデオパスの価値は、で/var/mobile/Applications/02F42CBF-D8BD-4155-85F2-8CF1E55B5023/Documents/videos/1334300431637030.mp4再生できるので、間違いなくビデオMPMoviePlayerViewControllerです。何が間違っているのかわかりませんが、何か提案があれば役に立ちます。

ありがとう。

4

3 に答える 3

26

私はそれを解決しました。どうやら[NSURL fileURLWithPath:videoPath]代わりに使用すると[NSURL URLWithString:videoPath]、すべての違いが生じます。

于 2012-04-19T08:33:46.123 に答える
15

null0pointerソリューションを使用しましたが、一部のビデオでは、最初のフレームが回転しているのを受け取りました。この問題を解決するために、AVAssetImageGeneratorのappliesPreferredTrackTransformプロパティをTRUEに設定しました。そして、このコードは次のようになります。

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
[imageGenerator setAppliesPreferredTrackTransform:TRUE];
UIImage* image = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]];
[self.imageView setImage:image];
于 2015-11-03T09:38:28.463 に答える
4

Swift 4.0でこれを行う:

            // Assumes you have a local `fileURL`

            var avAsset = AVURLAsset(url: fileURL, options: nil)
            var imageGenerator = AVAssetImageGenerator(asset: avAsset)
            imageGenerator.appliesPreferredTrackTransform = true
            var thumbnail: UIImage?

            do {
                thumbnail = try UIImage(cgImage: imageGenerator.copyCGImage(at: CMTime(seconds: 0, preferredTimescale: 1), actualTime: nil))
            } catch let e as NSError {
                print("Error: \(e.localizedDescription)")
            }
于 2019-04-22T20:49:19.540 に答える