1

我正在从视频库中获取视频或录制新视频。一旦在 imagepicker 方法中选择了 didfinishpickingmediawithinfo:我需要找到从我的视频专辑中选择的视频的持续时间,以及我从相机录制的视频。我已经使用 AVAsset 来获取 CMTime 中的持续时间,我还提到了 MPMoviePlayer 来获取视频的持续时间,但他们没有为我提供这样的属性。

任何帮助,将不胜感激

问候

4

4 回答 4

1
NSURL *recordedTmpFile = [info objectForKey:UIImagePickerControllerMediaURL];

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:recordedTmpFile];

CMTime duration = playerItem.duration;
float seconds = CMTimeGetSeconds(duration);
于 2012-08-06T10:51:07.417 回答
1

1)只需在您的应用程序中添加 AVFoundation 框架

2)然后将头文件导入您的控制器

#import <AVFoundation/AVFoundation.h> 

3)然后添加上面由victor编写的代码。

NSURL *recordedTmpFile = [info objectForKey:UIImagePickerControllerMediaURL];

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:recordedTmpFile];

CMTime duration = playerItem.duration;
float seconds = CMTimeGetSeconds(duration);
于 2012-10-10T06:52:59.730 回答
0

MPMoviePlayerController 有一个属性 duration。

@property (nonatomic, readonly) NSTimeInterval duration

请注意,该属性是只读的

根据文档

如果电影的持续时间未知,则此属性中的值为 0.0。如果随后确定了持续时间,则更新此属性并发布 MPMovieDurationAvailableNotification 通知。

但是为什么你更喜欢 MPMoviewPlayerController?AVFoundation 对于这种类型的操作要快得多。而且您不需要像在 MPMoviewPlayerController 中那样等待任何通知。

如果你想通过 AVAsset。这是一个确切的答案:MPMoviePlayerController - 持续时间始终为 0

于 2012-08-06T10:50:34.730 回答
0

使用 AVPlayerItem 对这个问题的其他答案对我不起作用,但这确实使用 AVURLAsset:

#import <AVFoundation/AVFoundation.h>

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSURL *videoURL=[info objectForKey:@"UIImagePickerControllerMediaURL"];
    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];

    NSTimeInterval durationInSeconds = 0.0;
    if (asset)
        durationInSeconds = CMTimeGetSeconds(asset.duration);
}
于 2014-03-09T20:03:08.860 回答