10

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

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

4

3 回答 3

2

有趣的问题。如果其他人正在查看此信息,这仅供参考。在 iPad OS 3.2 上,我发现在检索视频时出现了一些问题,尽管选择器可以工作,而且我可以从相册中选择视频,而不仅仅是从相机胶卷中。

这是我的工作代码片段

通话

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

所以在我看来,即使我选择整个视频,视频也可能正在通过修剪代码进行处理。另请注意,当我通过 iTunes 加载它时,最初是 m4v 类型的电影是 MOV 类型的,这当然无法在设备上播放!我确实尝试播放该 URL,但我收到一条警告说“无法播放此类电影”

我不太明白 Apple 在这里玩什么,该 API 似乎不能真正用作从照片库加载和播放视频的一种方式。

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

于 2010-07-02T09:11:55.743 回答
2

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

于 2009-10-27T13:22:55.220 回答
1

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

于 2009-11-14T06:18:39.547 回答