MPMoviePlayerController - 持续时间始终为0

imo*_*zer 8 objective-c mpmovieplayercontroller

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];
    }
Run Code Online (Sandbox Code Playgroud)

但持续时间始终为0.我知道视频有持续时间,因为在照片库中选择时,持续时间会显示为字幕的一部分.我知道持续时间可能并不总是可用,但在这种情况下,持续时间显示在照片库中.我还检查了contentURL属性,它具有很好的价值.我能够检索文件,获取文件大小等等,所以我知道文件的NSURL很好......

谢谢!

mem*_*ons 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) ;
Run Code Online (Sandbox Code Playgroud)

  • 这也需要CoreMedia框架. (2认同)