2011-09-16 58 views
3

在我的iOS應用程序(SDK 5.6),我從一個簡短的視頻創建AVURLAsset,就像這樣:爲什麼我的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網站中存儲在應用程序的Documents目錄中的示例.mov文件。

我想知道這個視頻的時長,進行進一步的處理,但是當我考察期間的財產,我得到這個:

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

我在做什麼錯?有沒有其他方法可以確定AVAsset或AVAssetTrack的持續時間?

TIA:約翰

回答

7

創建的資產,然而,這並不一定意味着它已經準備好使用。要使用,資產必須已加載其曲目。加載資產與

[資產loadValuesAsynchronouslyForKeys:[NSArray的 arrayWithObject:tracksKey] completionHandler: ^ { //完成塊進入此處。 }];

而且數組中應該有一個'duration'鍵。

加載完成後,得到與

Float64 durationSeconds = CMTimeGetSeconds([< #An資產#>持續時間])的持續時間;

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) 
相關問題