Próbuję uzyskać pierwszą klatkę z wybranego wideo w UIImagePickerController
, aby pokazać ją w UIImageView
, ale nie wiem, czy to możliwe. Jeśli tak, to jak mam to zrobić?Chwytanie pierwszej klatki wideo z UIImagePickerController?
Odpowiedz
Możesz to zrobić na jeden z dwóch sposobów. Pierwszym sposobem jest użycie MPMoviePlayerController
chwycić miniatury
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]
initWithContentURL:videoURL];
moviePlayer.shouldAutoplay = NO;
UIImage *thumbnail = [moviePlayer thumbnailImageAtTime:time
timeOption:MPMovieTimeOptionNearestKeyFrame];
To działa, ale MPMoviePlayerController
nie jest szczególnie lekki przedmiot i nie jest szczególnie szybko chwytając miniatury.
Preferowanym sposobem jest użycie nowego parametru AVAssetImageGenerator
w AVFoundation. Jest szybki, lekki i bardziej elastyczny niż stary sposób. Oto metoda pomocnicza, która zwróci autoodtwarzany obraz z filmu.
+ (UIImage *)thumbnailImageForVideo:(NSURL *)videoURL
atTime:(NSTimeInterval)time
{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
NSParameterAssert(asset);
AVAssetImageGenerator *assetIG =
[[AVAssetImageGenerator alloc] initWithAsset:asset];
assetIG.appliesPreferredTrackTransform = YES;
assetIG.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
CGImageRef thumbnailImageRef = NULL;
CFTimeInterval thumbnailImageTime = time;
NSError *igError = nil;
thumbnailImageRef =
[assetIG copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)
actualTime:NULL
error:&igError];
if (!thumbnailImageRef)
NSLog(@"thumbnailImageGenerationError %@", igError);
UIImage *thumbnailImage = thumbnailImageRef
? [[UIImage alloc] initWithCGImage:thumbnailImageRef]
: nil;
return thumbnailImage;
}
użycie Asynchronous
- (void)thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time completion:(void (^)(UIImage *)) completion
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
NSParameterAssert(asset);
AVAssetImageGenerator *assetIG =
[[AVAssetImageGenerator alloc] initWithAsset:asset];
assetIG.appliesPreferredTrackTransform = YES;
assetIG.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
CGImageRef thumbnailImageRef = NULL;
CFTimeInterval thumbnailImageTime = time;
NSError *igError = nil;
thumbnailImageRef =
[assetIG copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)
actualTime:NULL
error:&igError];
if (!thumbnailImageRef)
NSLog(@"thumbnailImageGenerationError %@", igError);
UIImage *thumbnailImage = thumbnailImageRef
? [[UIImage alloc] initWithCGImage:thumbnailImageRef]
: nil;
dispatch_async(dispatch_get_main_queue(), ^{
completion(thumbnailImage);
});
});
}
Musisz dodać ramy "Core Media" również do swojego celu. –
+1 Mój kolega nie był w stanie napisać czegoś takiego, ale do ciebie ... –
dla innych, którzy próbują tego użyć: zwróć uwagę, jeśli wideoURL zostało utworzone przez fileURLWithPath lub URLWithString (gdy masz ścieżkę w NSString *) – user1105951
- 1. Dynamicznie używając pierwszej klatki jako plakatu w wideo HTML5?
- 2. Pobieranie pierwszej klatki filmu wideo - Rozdzielczość miniatur - iPhone
- 3. Pokaż wideo tylko w UIImagePickerController
- 4. Jak pobrać klatki wideo w Qt?
- 5. Uzyskiwanie pierwszej klatki obrazu GIF bez pobierania wszystkich innych ramek
- 6. Jak wyłączyć przechwytywanie wideo w UIImagePickerController
- 7. Jak potasować klatki wideo na żywo z ffmpeg do PIL?
- 8. Nakładka numeru klatki z FFmpeg
- 9. Jak wybrać dowolny plik wideo lub filmu z UIImagePickerController
- 10. Jak uniknąć kompresji po wybraniu wideo z UIImagePickerController w ios
- 11. Zastosuj efekt do klatki wideo przechwyconej przez kamerę
- 12. Czy mogę uzyskać numer bieżącej klatki w wideo HTML5?
- 13. UIImagePickerController do filmu Pozycja
- 14. Zezwalaj UIImagePickerController na edycję wideo, ale nie na obrazy
- 15. zapisywanie wideo; przy użyciu UIImagePickerController; IOS 8 Swift
- 16. UIImagePickerController utknął podczas kompresji wideo na symulatorze iOS10 po wybraniu wideo
- 17. UIImagePickerController Cropping?
- 18. Najszybszy sposób wyodrębnienia określonej klatki z filmu wideo (PHP/ffmpeg/cokolwiek)
- 19. Monotouch - UIImagePickerController z aplikacją iPad
- 20. Samouczek UIImagePickerController?
- 21. Pomiń widok UIImagePickerController Zobacz podgląd?
- 22. Współrzędne myszy względem klatki
- 23. Pobierz obraz z wideo
- 24. Chwytanie oznaczonych zdjęć Instagram w czasie rzeczywistym
- 25. Chwytanie zawartości wielu uchwytów z curl multi exec?
- 26. Jak wyodrębnić obrazy z wideo?
- 27. UIImagePickerController nie pełny ekran
- 28. wxPython Wyłącz zmianę rozmiaru klatki
- 29. Wideo z zapętlaniem wideo Replenish
- 30. Przedstawianie UIImagePickerController awarii aplikacji
podobne pytanie http://stackoverflow.com/questions/1347562/getting-thumbnail-from-a-video-url-or-data-in-iphone-sdk –