【发布时间】:2011-05-12 18:49:22
【问题描述】:
iPhone4、iOS 4.3.3、iOS SDK4.3
大家好,
我正在创建视频上传功能。视频是使用 UIImagePickerController 检索的,可以使用相机捕获或从照片库中选取。我有一个最长 60 秒的应用程序限制。使用相机录制视频时,这很容易实现:
// 将视频限制为 60 秒
[选择器 setVideoMaximumDuration:60];
但是,当从照片库中选择视频时,我看到的获取持续时间的唯一方法是通过 MPMoviePlayerController 持续时间属性,如下所示:
// MediaType 可以是 kUTTypeImage 或 kUTTypeMovie。
NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType]; NSLog(@"%@",mediaType);
// 如果是电影
if ( [mediaType isEqualToString:(NSString*)kUTTypeMovie] ) {
// get the URL
NSURL* mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSLog(@"%@",mediaURL);
// can use MPMoviePlayerController class to get duration
int duration = -1;
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: mediaURL];
if (moviePlayer != nil) {
duration = moviePlayer.duration;
NSString *path = moviePlayer.contentURL;
[moviePlayer release];
}
但是持续时间始终为 0。我知道视频有持续时间,因为在照片库中选择视频时,持续时间显示为字幕的一部分。我了解持续时间可能并不总是可用,但在这种情况下,持续时间显示在照片库中。我还检查了 contentURL 属性,它具有很好的价值。我能够检索文件、获取文件大小等,所以我知道文件的 NSURL 很好......
谢谢!
【问题讨论】:
-
您可以收听 MPMovieDurationAvailableNotification。这将要求您将 moviePlayer 保留足够长的时间,以便它可以确定持续时间。照片库可能使用缓存值。
-
@imobilizer 如果以下答案有帮助,请标记为已接受。
标签: objective-c mpmovieplayercontroller