电影Item的UIImagePickerController

时间:2009-09-04 20:57:16

标签: iphone uiimagepickercontroller iphone-3gs

我正在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];

但我可以看到,一旦控制器被调用,就会出现令人不安的视频修剪界面。按“选择”后,无论是否触摸剪裁控制,视频都会被修剪。有没有办法绕过这个修剪界面并直接获取视频文件的路径?

3 个答案:

答案 0 :(得分:2)

您应该设置allowsEditing = NO;而不是allowsImageEditing = NO;(已在3.1中弃用)。然后,除非所选电影超过10分钟,否则不应出现剪裁界面(来自文档:“最长电影持续时间为10分钟。如果用户选择持续时间超过10分钟的电影,则会被迫修剪它在保存之前。“)。

答案 1 :(得分: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];
}

但是,我从选择器中检索的视频网址的格式为

  

文件:/localhost/private/var/mobile/Applications/C6FAC491-D27D-45A6-B805-951727ED2CEC/tmp/-Tmp-/trim.KOzqps.MOV

因此,即使我选择整个视频,我也希望通过修剪代码处理视频。另请注意,当我通过iTunes加载时,最初为m4v类型的电影是MOV类型,当然在设备上无法播放!我确实尝试过播放这个网址,但收到一条警告说“这种电影无法播放”

我不太明白Apple在这里播放的内容,API似乎并不能用作从照片库加载和播放视频的方式。

希望IOS 4会更加即将推出,但对于我的iPad应用程序来说,这还需要几个月的时间。

答案 2 :(得分:1)

好的,所以我仔细查看SDK文档后就可以了。我可以在3GS上从Camera Roll目录中获取视频。但我找不到UIImagePickerController可以从Camera Roll以外的目录中选择视频的任何方式(例如,用户通过iTunes同步视频的设备的照片库)。 SDK中有没有标准方法可以做到这一点?