iPhone4,iOS 4.3.3,iOS SDK4.3
大家好,
我正在制作视频上传功能。使用UIImagePickerController检索视频,可以使用相机捕获视频或从照片库中选取视频。我的应用程序约束最长持续时间为60秒。使用相机通过以下方式录制视频时很容易实现:
//将视频限制为60秒
[picker 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是好的......
谢谢!
答案 0 :(得分:16)
我没有看到您的代码出现任何问题。但是,对于这种类型的操作,使用AVFoundation要快得多。这是使用AVFoundation获取持续时间的代码片段:
AVURLAsset *asset = [[[AVURLAsset alloc] initWithURL:anURI
options:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
AVURLAssetPreferPreciseDurationAndTimingKey,
nil]] autorelease];
NSTimeInterval durationInSeconds = 0.0;
if (asset)
durationInSeconds = CMTimeGetSeconds(asset.duration) ;