为什么我的AVURLAsset没有持续时间?

时间:2011-09-16 15:40:40

标签: ios avfoundation

在我的iOS应用程序(SDK 5.6)中,我从短视频中创建AVURLAsset,如下所示:

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];

这似乎工作正常。如果我在gdb中检查资产,它看起来像这样:

(gdb) po asset
<AVURLAsset: 0x1a1c40, URL = file://localhost/var/mobile/Applications/A2142D8E-BC19-4E0B-A4C8-ABED4F7D4970/Documents/sample_iTunes.mov>

我使用Apple网站上的示例.mov文件,该文件存储在应用程序的Documents目录中。

我想知道这段视频的持续时间,以便进一步处理,但是当我检查持续时间属性时,我明白了:

(gdb) po asset.duration
There is no member named duration.

我做错了什么?有没有其他方法可以确定AVAsset或AVAssetTrack的持续时间?

TIA:John

2 个答案:

答案 0 :(得分:7)

然而,创建资产并不一定意味着它已经可以使用了。要使用,资产必须加载其轨道。使用

加载资产
  

[asset loadValuesAsynchronouslyForKeys:[NSArray   arrayWithObject:tracksKey] completionHandler:        ^ {            //完成块在这里。        }];

数组中应该有一个'持续时间'键。

加载完成后,使用

获取持续时间
  

Float64 durationSeconds = CMTimeGetSeconds([&lt; #An asset#&gt; duration]);

答案 1 :(得分:1)

  

对于Swift 3.0及以上版本

导入AVFoundation

  let asset = AVAsset(url: URL(fileURLWithPath: ("Your File Path here")!))
  let totalSeconds = Int(CMTimeGetSeconds(asset.duration))
  let minutes = totalSeconds / 60
  let seconds = totalSeconds % 60
  let mediaTime = String(format:"%02i:%02i",minutes, seconds)