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

Joh*_*ohn 3 avfoundation ios

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

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

(gdb) po asset.duration
There is no member named duration.
Run Code Online (Sandbox Code Playgroud)

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

TIA:约翰

Ste*_*Hsu 7

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

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

并且数组中应该有一个"持续时间"键.

加载完成后,获取持续时间

Float64 durationSeconds = CMTimeGetSeconds([<资产#>持续时间]);