UIImagePickerController для фильма Пункт
Я пишу приложение для загрузки видео на iPhone 3GS, где я сначала направляю пользователя к фотоальбому, а затем выбираю видео для публикации или загрузки. Я использую UIImagePickerController следующим образом:
videoPickerCtrl = [[UIImagePickerController alloc] init];
videoPickerCtrl.delegate = self;
videoPickerCtrl.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
videoPickerCtrl.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:videoPickerCtrl.sourceType];
videoPickerCtrl.allowsImageEditing = NO;
videoPickerCtrl.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
[window addSubview:videoPickerCtrl.view];
Но я могу видеть, что после вызова контроллера появляется нарушающий интерфейс обрезки видео. Как только я нажимаю "выбрать", видео всегда обрезается независимо от того, касаюсь ли я элементов управления обрезки или нет. Есть ли способ обойти этот интерфейс обрезки и напрямую получить путь к видеофайлу?
Ответы
Ответ 1
Вы должны установить allowsEditing = NO;
вместо allowsImageEditing = NO;
(который устарел в 3.1). Затем интерфейс обрезки не должен появляться, если только выбранный фильм не превышает 10 минут (из документов: "Максимальная продолжительность фильма - 10 минут. Если пользователь выбирает фильм продолжительностью более 10 минут, он вынужден обрезать прежде чем сохранять его." ).
Ответ 2
Интересная проблема. Это просто для информации, если кто-то еще будет смотреть на это. На iPad OS 3.2 я обнаружил некоторые проблемы с получением видео, хотя сборщик работает, и я могу выбирать видео из альбомов, а не только из ролика камеры.
Здесь мой рабочий код frag
Вызов
NSArray *mediaTypesAllowed = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[picker setMediaTypes:mediaTypesAllowed];
picker.delegate = self;
picker.allowsEditing = NO;
picker.wantsFullScreenLayout = YES;
if(!IsEmpty(self.editBackgroundPopover)){
[self.editBackgroundPopover setContentViewController:picker animated:YES];
}
И вот метод делегата
imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self.editBackgroundPopover dismissPopoverAnimated:true];
NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];
//not production code, do not use hard coded string in real app
if ( [ mediaType isEqualToString:@"public.image" ]) {
NSLog(@"Picked a photo");
}
//not production code, do not use hard coded string in real app
else if ( [ mediaType isEqualToString:@"public.movie" ]){
NSLog(@"Picked a movie at URL %@", [info objectForKey:UIImagePickerControllerMediaURL]);
NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
NSLog(@"> %@", [url absoluteString]);
}
[[picker self] dismissModalViewControllerAnimated:YES];
}
Однако URL-адрес видео, который я извлекаю из сборщика, имеет форму
Файл:/localhost/private/var/mobile/Applications/C6FAC491-D27D-45A6-B805-951727ED2CEC/tmp/-Tmp-/trim.KOzqps.MOV
Поэтому мне кажется, что видео может обрабатываться с помощью кода обрезки, даже если я выбираю видео в целом. Также обратите внимание, что фильм, первоначально из типа m4v, когда я загружал его через iTunes, имеет тип MOV, который, конечно же, не воспроизводится на устройстве! Я попытался воспроизвести URL-адрес, но получил предупреждение: "Этот фильм нельзя воспроизвести"
Я не совсем понимаю, что здесь играет Apple, API, похоже, действительно не используется для загрузки и воспроизведения видео из библиотеки фотографий.
Надеюсь, что IOS 4 будет более ожидаемым, но для моего iPad-приложения, которое еще на несколько месяцев.
Ответ 3
Хорошо, так что я вернулся, долго смотрел на SDK-документы. Я могу получить видео из каталога Camera Roll на моем 3GS. Но я не могу найти способ, которым UIImagePickerController может выбирать видео из каталогов, отличных от Camera Roll (например, Photo Library, где пользователь синхронизирует видео через iTunes). Есть ли стандартный SDK для этого?