objective-c - MPMoviePlayerController - 持续时间始终为 0

标签 objective-c mpmovieplayercontroller

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 属性,它具有很好的值(value)。我能够检索文件,获取文件大小等,所以我知道文件的 NSURL 是好的...

谢谢!

最佳答案

我没有立即发现您的代码有任何问题。但是,使用 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) ;

关于objective-c - MPMoviePlayerController - 持续时间始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982893/

相关文章:

ios - NSNumber 原始值相等与 isEqualToNumber 与 Obj-C 文字

iphone - 如何在 iPhone 上捕获 MPMoviePlayer 进度条轨道事件

iOS - 我无法使用 MPMoviePlayerController 重现视频

ios - 播放 youtube 视频 iOS 7 时 MPMoviePlayerController 错误 _itemFailedToPlayToEnd

objective-c - 如何重命名 UIViewController 及其 xib

objective-c - 带有图像的 ios 标签栏自定义

ios - 数据不会从 JSON 解析加载到某些 Tableview 单元格上

objective-c - 每个 Action 方法都需要一个发送者对象吗?

ios - 在 iOS 中单击全屏按钮时,可以强制 MPMoviePlayerController 横向显示

iOS MPMoviePlayerViewController - 如何在应用程序发送到后台时关闭?