iPhone:如何从图书馆中选择视频的持续时间?

Mau*_*lik 20 iphone uiimagepickercontroller ios

UIImagePickerController用来从库中选择视频文件.用户可以上传视频.

此外,我正在使用videoMaximumDuration属性,而用户想要捕获视频并上传它.

我想知道如何获取所选视频文件的持续时间?这样我就可以限制用户上传持续时间超过20秒的视频.

我可以通过以下代码获得有关所选视频的一些基本信息:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    selectedVideoUrl = [info objectForKey:UIImagePickerControllerMediaURL];
    NSError *error;
    NSDictionary * properties = [[NSFileManager defaultManager] attributesOfItemAtPath:selectedVideoUrl.path error:&error];
    NSNumber * size = [properties objectForKey: NSFileSize];
    NSLog(@"Vide info :- %@",properties);
}
Run Code Online (Sandbox Code Playgroud)

但是所选视频的持续时间并不存在.

谢谢...

Mau*_*lik 30

得到了解决方案:我使用AVPlayerItemAVFoundationCoreMedia框架.

#import <AVFoundation/AVFoundation.h>
#import <AVFoundation/AVAsset.h>

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    selectedVideoUrl = [info objectForKey:UIImagePickerControllerMediaURL];

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:selectedVideoUrl];

    CMTime duration = playerItem.duration;
    float seconds = CMTimeGetSeconds(duration);
    NSLog(@"duration: %.2f", seconds);
}
Run Code Online (Sandbox Code Playgroud)

  • 让nan回来获取mp4文件...我可以通过AVURLAsset获取视频帧,所以我知道文件在那里并且可以用后一种方式处理... (4认同)

eta*_*luz 30

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


bud*_*ino 8

斯威夫特4

无论使用didFinishPickingMediaWithInfodidFinishRecordingToOutputFileAtURL您可以:

// needed only for didFinishPickingMediaWithInfo
let outputFileURL = info[UIImagePickerControllerMediaURL] as! URL

// get the asset
let asset = AVURLAsset(url: outputFileURL)

// get the time in seconds
let durationInSeconds = asset.duration.seconds
Run Code Online (Sandbox Code Playgroud)