【问题标题】:AVAsset duration is not correctAVAsset 持续时间不正确
【发布时间】:2014-04-03 13:00:31
【问题描述】:

我在 Mac 播放器中有视频,视频时长为 31 秒。当我在我的应用程序中使用它并加载该文件时,AVAsset 的持续时间为“28.03”。

AVAsset *videoAsset = [AVAsset assetWithURL:videoUrl];
Float64 time = CMTimeGetSeconds(videoAsset.duration);

【问题讨论】:

    标签: ios iphone avfoundation avasset


    【解决方案1】:

    对于某些类型的资产,持续时间是一个近似值。如果您需要确切的持续时间(应该是极端情况),请使用:

    NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};
    AVURLAsset *videoAsset = [URLAssetWithURL:videoUrl options:options];
    

    您可以在documentation 找到更多信息。计算持续时间可能需要一些时间,所以记得使用异步加载:

    [videoAsset loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler:^{
        switch ([videoAsset statusOfValueForKey:@"duration" error:nil]) {
            case AVKeyValueStatusLoaded:
                Float64 time = CMTimeGetSeconds(videoAsset.duration);
                // ...
                break;
            default:
                // other cases like cancellation or fail
                break;
        }
    }];
    

    您可以在视频 Discovering AV Foundation - WWDC 2010 Session 405 中找到更多使用AVFoundation API 的技巧

    【讨论】:

    • 没有。你不应该只在极端情况下使用。当您处理作品时,您必须始终使用它。
    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多