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 для этого?