2017-12-01 4 views
0

Es könnte doppelte Frage sein, aber ich verbrachte zu viel Zeit für die Lösung. Ich lade eine mp4-Datei in das Dokumentarverzeichnis herunter. Ich kann alle Dateinamen mit dieser Funktion erhalten:So erhalten Sie Videodauer in Document Directory

func listFilesFromDocumentsFolder() -> [String]? 
    { 
     let fileMngr = FileManager.default; 
     let docs = fileMngr.urls(for: .documentDirectory, in: .userDomainMask)[0].path 
     return try? fileMngr.contentsOfDirectory(atPath:docs) 
    } 

Und ich möchte alle Zeitlänge dieser Datei bekommen. Lassen Sie mich zeigen, was ich versuche:

var downs = listFilesFromDocumentsFolder()! 
for i in 0...downs.count - 1{ 
    if(downs[i] == ".DS_Store"){ 
       continue 
    } 
    let fileManager = FileManager.default; 
    let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask) 
    if let documentDirectory:NSURL = urls.first as! NSURL as! NSURL{ 
     let yourFinalVideoURL = documentDirectory.appendingPathComponent(downs[i]) 
     let asset : AVURLAsset = AVURLAsset(url: yourFinalVideoURL!) as AVURLAsset 
     let totalSeconds = Int(CMTimeGetSeconds(asset.duration)) 
     let minutes = totalSeconds/60 
     let seconds = totalSeconds % 60 
     let mediaTime = String(format:"%02i:%02i",minutes, seconds) 
     print(yourFinalVideoURL) 
     print(mediaTime) 
} 

der Ausgang

Optional(file:///Users/utf8/Library/Developer/CoreSimulator/Devices/D4F341F1-38A2-498B-99F0-076BE9164A5C/data/Containers/Data/Application/718927F7-4E39-43A8-B760-2A468F82A10F/Documents/viki50102klr.mp4) 
00:00 

Meiner Meinung nach ist ich falsch gemacht habe, wenn ich versuche URL meiner Videodatei zu erhalten. Aber wie behebt man das? Ich probiere viele Dinge aus. Auch ich überprüfe ob die Datei existiert oder nicht. Was es natürlich gibt.

Auch versuche ich

AVAsset(url: URL.init(url: yourFinalVideoURL)!) 

unfortunetely funktioniert es nicht ..

für Lösung danke trotzdem schon ...

+0

Was bekommen Sie, wenn Sie 'totalSeconds' statt' mediaTime' drucken? – rmaddy

+0

Unzusammenhängend, aber warum all das wirklich schlechte Casting mit 'NSURL'? – rmaddy

+0

Hallo Maddy, seine 0 (Null) auch ... – Antiokhos

Antwort

2

Sie sollten Ihre URL NSURL nicht werfen. Rufen Sie einfach Ihre Dokumentenverzeichnis-URL ab und hängen Sie Ihren Dateinamen und Ihre Erweiterung an. Darüber hinaus können Sie CMTime Sekunden Eigenschaft erhalten, die eine doppelt so hoch ist und String(format:) Methode verwenden, um richtig die Zeit in "h m s" Format anzuzeigen:

let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
let videoURL = documentDirectory.appendingPathComponent(downs[i])  
let duration = AVURLAsset(url: videoURL).duration.seconds 
    print(duration) 
let time: String 
if duration > 3600 { 
    time = String(format:"%dh %dm %ds", 
     Int(duration/3600), 
     Int((duration/60).truncatingRemainder(dividingBy: 60)), 
     Int(duration.truncatingRemainder(dividingBy: 60))) 
} else { 
    time = String(format:"%dm %ds", 
     Int((duration/60).truncatingRemainder(dividingBy: 60)), 
     Int(duration.truncatingRemainder(dividingBy: 60))) 
} 
print(time) 
+1

Yup das ist es. Danke. Auch danke für das Korrigieren des schlechten nsurl Castings – Antiokhos

+0

sind Sie willkommen –

Verwandte Themen