2015-09-21 26 views
6

Videodan küçük resim alıp masaüstümde göstermeye çalışıyorum. İşte benim kodum:iOS - Videonun oynatılmadan küçük resmi nasıl edinilir?

- (UIImage *)imageFromVideoURL:(NSURL *)contentURL { 
    AVAsset *asset = [AVAsset assetWithURL:contentURL]; 

    // Get thumbnail at the very start of the video 
    CMTime thumbnailTime = [asset duration]; 
    thumbnailTime.value = 25; 

    // Get image from the video at the given time 
    AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 

    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:thumbnailTime actualTime:NULL error:NULL]; 
    UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 

    return thumbnail; 
} 

Ancak görüntü her zaman siyah olarak döndürülür. Sorun nedir?

+1

Zaman.value milisaniyedir, belki de zaman çerçevesi siyahtır Çerçeveyi başka bir değere dönüştürdünüz mü –

+0

Yardımlarınız için teşekkürler! İşe yarıyor. – TienLe

+0

Most Welcome @TienLe –

cevap

1
NSURL *videoURL = [NSURL fileURLWithPath:filepath];// filepath is your video file path 



AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; 
AVAssetImageGenerator *generateImg = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
NSError *error = NULL; 
CMTime time = CMTimeMake(1, 1); 
CGImageRef refImg = [generateImg copyCGImageAtTime:time actualTime:NULL error:&error]; 
NSLog(@"error==%@, Refimage==%@", error, refImg); 

UIImage *FrameImage= [[UIImage alloc] initWithCGImage:refImg]; 
return FrameImage; 
2

bunu kullanın: Swift 3 -

func createThumbnailOfVideoFromFileURL(videoURL: String) -> UIImage? { 
    let asset = AVAsset(url: URL(string: videoURL)!) 
    let assetImgGenerate = AVAssetImageGenerator(asset: asset) 
    assetImgGenerate.appliesPreferredTrackTransform = true 
    let time = CMTimeMakeWithSeconds(Float64(1), 100) 
    do { 
     let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil) 
     let thumbnail = UIImage(cgImage: img) 
     return thumbnail 
    } catch { 
     return UIImage(named: "ico_placeholder") 
    } 
} 

Önemli Not: Bu kaynak kapsamlı gibi bir if else bu kullanmanız gerekecektir

. Görüntüyü bir dizi veya modelde saklamanız ve bir kez küçük resim oluşturulduysa, cellForRowAtIndexPath'un UITableView

-1

sayfasının kaydırılmasının bir bağlantıya neden olmadığını kontrol etmesi gerekir. "Videolardan

https://littlebitesofcocoa.com/115-generating-thumbnails-from-videos

Bu uygulama bir videoda ne bir veya daha fazla küçük resim (küçük hareketsiz görüntü önizleme) göstermek gerekir etmek için oldukça yaygındır küçük Resimleri oluşturuluyor. Bununla birlikte, videonun nereden geldiğine bağlı olarak, önceden hazırlanmış küçük resme/videolara kolayca erişemeyebiliriz. AVAssetImageGenerator'u kendi başımıza nasıl kullanabileceğimize bakalım. Video için basit bir NSURL ile başlıyoruz, bu yerel veya uzak olabilir. Bununla bir AVAsset oluşturacağız ve yeni bir AVAssetImageGenerator nesnesine. Jeneratörü tercih edilen dönüşümleri uygulamak için yapılandıracağız, böylece küçük resimlerimiz doğru yönde.

import AVFoundation 

if let asset = AVAsset(URL: videoURL) { 
    let durationSeconds = CMTimeGetSeconds(asset.duration) 
    let generator = AVAssetImageGenerator(asset: asset) 

    generator.appliesPreferredTrackTransform = true 

    let time = CMTimeMakeWithSeconds(durationSeconds/3.0, 600) 
    var thumbnailImage: CGImageRef 
    generator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: time)]) { 
     (requestedTime: CMTime, thumbnail: CGImage?, actualTime: CMTime, result: AVAssetImageGeneratorResult, error: NSError?) in 
     self.videoThumbnailImageView.image = UIImage(CGImage: thumbnail) 
    } 
} 
+0

Lütfen bu bağlantılı içeriğin bir kısmını cevabınıza almayı düşünün. – muttonUp

0

Sadece bu kodu kullanın .. Video URL'nizi geçirin ve bir görüntü alın.

+(UIImage *)getPlaceholderImageFromVideo:(NSString *)videoURL { 
    NSURL *url = [NSURL URLWithString:videoURL]; 
    AVAsset *asset = [AVAsset assetWithURL:url]; 
    AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
    CMTime time = [asset duration]; 
    time.value = 0; 
    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]; 
    UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return thumbnail; 
} 

Umut, bu sizin aradığınız şeydir. Herhangi bir endişe bana geri dönüyor. :)

+0

Bu fonksiyon az zaman alarak, bu tablo kaydırma nedeniyle düzgün değil. –

İlgili konular