iphone sdk> 3.0. Видео миниатюры?

Из того, что я прочитал, яблоко не раскрывает api, чтобы позволить разработчикам получить миниатюру фильма с использованием текущего sdk.

Может ли кто-нибудь поделиться каким-то кодом относительно того, как они это делают? Я слышал, что вы можете получить доступ к представлению выбора камеры и найти изображение сразу перед закрытием ii-фильтра. Кажется, это кажется уродливым.

Кроме того, я рассматривал использование ffmpeg для захвата кадра из фильма, но не знал, как скомпилировать его как библиотеку для iphone. Любые указатели будут с благодарностью

В той же папке, что и в миниатюре, есть jpg. Я тестировал его только с видео, записанным с телефона, но он отлично работает. Его не называют так же, как и в фильме, поэтому получите путь к каталогу, в котором находится фильм, и выполните итерацию для .jpg, и вы уходите.

Надеюсь, мой код поможет вам, ребята. Это ужасно. Я думаю, что яблоко должно открывать такие API. Конечно, все NSLog () должны быть удалены. Это просто для демонстрации.

Элвин

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ // eg NSString *tempFilePath = [(NSURL *)[info valueForKey:UIImagePickerControllerMediaURL] absoluteString]; NSLog(@"didFinishPickingMediaWithInfo: %@",tempFilePath); // eg /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp/capture/capturedvideo.MOV tempFilePath = [[tempFilePath substringFromIndex:16] retain]; NSLog(@"didFinishPickingMediaWithInfo: %@",tempFilePath); NSLog(@"===Try to save video to camera roll.==="); NSLog(@"UIVideoAtPathIsCompatibleWithSavedPhotosAlbum: %@",UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(tempFilePath)? @"YES":@"NO"); // Check if the video file can be saved to camera roll. if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(tempFilePath)){ // YES. Copy it to the camera roll. UISaveVideoAtPathToSavedPhotosAlbum(tempFilePath, self, @selector(video:didFinishSavingWithError:contextInfo:), tempFilePath); } [self dismissModalViewControllerAnimated:YES]; } - (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(NSString *)contextInfo{ NSLog(@"didFinishSavingWithError--videoPath in camera roll:%@",videoPath); NSLog(@"didFinishSavingWithError--videoPath in temp directory:%@",contextInfo); // The thumbnail jpg should located in this directory. NSString *thumbnailDirectory = [[contextInfo stringByDeletingLastPathComponent] stringByDeletingLastPathComponent]; // Debug info. list all files in the directory of the video file. // eg /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp/capture NSLog([contextInfo stringByDeletingLastPathComponent]); NSLog([[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[contextInfo stringByDeletingLastPathComponent] error:nil] description]); // Debug info. list all files in the parent directory of the video file, ie the "~/tmp" directory. // eg /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp NSLog(thumbnailDirectory); NSLog([[[NSFileManager defaultManager] contentsOfDirectoryAtPath:thumbnailDirectory error:nil] description]); /////////////////// // Find the thumbnail for the video just recorded. NSString *file,*latestFile; NSDate *latestDate = [NSDate distantPast]; NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:[[contextInfo stringByDeletingLastPathComponent]stringByDeletingLastPathComponent]]; // Enumerate all files in the ~/tmp directory while (file = [dirEnum nextObject]) { // Only check files with jpg extension. if ([[file pathExtension] isEqualToString: @"jpg"]) { NSLog(@"***latestDate:%@",latestDate); NSLog(@"***file name:%@",file); NSLog(@"***NSFileSize:%@", [[dirEnum fileAttributes] valueForKey:@"NSFileSize"]); NSLog(@"***NSFileModificationDate:%@", [[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"]); // Check if current jpg file is the latest one. if ([(NSDate *)[[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"] compare:latestDate] == NSOrderedDescending){ latestDate = [[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"]; latestFile = file; NSLog(@"***latestFile changed:%@",latestFile); } } } // The thumbnail path. latestFile = [NSTemporaryDirectory() stringByAppendingPathComponent:latestFile]; NSLog(@"****** The thumbnail file should be this one:%@",latestFile); // Your code ... // Your code ... // Your code ... } 

Лучший метод, который я нашел … MPMoviePlayerController thumbnailImageAtTime: timeOption

 NSString *videoLink=[info objectForKey:@"UIImagePickerControllerMediaURL"]; MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:(NSURL*)videoLink]; UIImage *imageSel = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]; [player stop]; [player release]; 

Вот сообщение в блоге об извлечении кадров из фильмов с помощью ffmpeg:

http://www.codza.com/extracting-frames-from-movies-on-iphone

Соответствующий проект по github: iFrameExtractor

Просто хотел предоставить обновление об этом. Кажется, что все работает с точки зрения получения миниатюры, когда вы установили свой сборщик в UIImagePickerControllerSourceTypeCamera. Однако при попытке выбрать из существующей библиотеки (то есть UIImagePickerControllerSourceTypePhotoLibrary) .jpg для миниатюры никогда не создается. Я даже попробовал повторное сохранение с помощью UISaveVideoAtPathToSavedPhotosAlbum (…) и до сих пор не играю в кости. Кажется, что миниатюра сначала создается при захвате видео. Это ваша единственная возможность «схватить» ее. После этого он перемещается в подкаталог / var / mobile / Media / DCIM /. Хотя вы действительно можете просмотреть миниатюру и посмотреть, что есть, этот файл нечитабелен и недоступен, так как я считаю, что каталог защищен.

Если у кого-то есть обходной путь для этого, я был бы очень благодарен за это, так как в моем случае мне нужно взять миниатюру существующего видео после его выбора из библиотеки.

Если вы используете UIImagePickerController для получения изображения, тогда JPG не будет храниться в каталоге tmp. Я не уверен в ответе на это, но ffmpeg, а точнее, библиотеки, стоящие за ним, может быть вашим выбором.

  • Xcode 4 - ошибка «Недействительность подлинного подписи не найдена» при настройке профилей при установке нового Macintosh
  • iPhone: как использовать performSelector: onThread: withObject: waitUntilDone: метод?
  • Изменение яркости подсветки на iPhone программно
  • Как исправить ошибку NSURLErrorDomain -999 в ОС iPhone 3.0
  • Как создать одноэлементный class в объекте C
  • Проверьте, возвращает ли NSURL 404
  • Пользовательский интерфейс UINavigationBar
  • Случайно синхронизировал все контакты Google с iphone
  • Могу ли я заставить пользователя iPhone обновить приложение?
  • Как сделать один цвет прозрачным на UIImage?
  • Потяните, чтобы обновить UITableView без UITableViewController
  • Давайте будем гением компьютера.