在我的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
答案 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)