Я использую это для справки: Getting thumbnail from a video url or data in IPhone SDKСоздание эскизов из видео - ios7
метод использует класс MPMoviePlayerController вместо AVFoundation, и я думаю, что я хочу использовать это, а также потому, что люди говорили, что MPMoviePlayer путь быстрее, чем AVFoundation.
Проблема заключается в том, что метод, используемый для создания миниатюр, [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]
устарел в iOS 7.0.
Просмотрев документы яблока, оставшиеся поддерживаемые способы создания миниатюр - это методы (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option
и (void)cancelAllThumbnailImageRequests
. Но, как диктует подписи методов, эти методы ничего не возвращают. Итак, как мне получить доступ к миниатюре UIImage
, созданной этими методами?
Если это помогает, это то, что я до сих пор с точки зрения кода:
self.videoURL = info[UIImagePickerControllerMediaURL];
NSData *videoData = [NSData dataWithContentsOfURL:self.videoURL];
//Create thumbnail image
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL];
[player requestThumbnailImagesAtTimes:@[@1] timeOption:MPMovieTimeOptionNearestKeyFrame];
//UIImage *thumbnail = ???
Как получить ссылку UIImage в миниатюре?
EDIT Я понял, как создать уведомление для запроса миниатюрного изображения (с использованием this question в качестве ссылки). Однако я понимаю, что этот метод работает асинхронно из основного потока, и поэтому мой метод обработчика уведомлений, похоже, никогда не называется.
Это то, что у меня есть сейчас.
self.videoURL = info[UIImagePickerControllerMediaURL];
NSData *videoData = [NSData dataWithContentsOfURL:self.videoURL];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleThumbnailImageRequestFinishNotification:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:player];
[player requestThumbnailImagesAtTimes:@[@1] timeOption:MPMovieTimeOptionNearestKeyFrame];
И тогда мой метод обработчика:
-(void)handleThumbnailImageRequestFinishNotification:(NSNotification*)notification
{
NSDictionary *userinfo = [notification userInfo];
NSError* value = [userinfo objectForKey:MPMoviePlayerThumbnailErrorKey];
if (value != nil)
{
NSLog(@"Error creating video thumbnail image. Details: %@", [value debugDescription]);
}
else
{
UIImage *thumbnail = [userinfo valueForKey:MPMoviePlayerThumbnailImageKey];
}
Но обработчик никогда не вызывается (или так кажется).
Работает, спасибо. – c0d3Junk13
@ c0d3Junk13 приветствую :) – sankalp