2017-12-01 21 views
0

これは重複する質問かもしれませんが、私は解決に多くの時間を費やしました。 私はドキュメンタリー・ディレクトリにmp4ファイルをダウンロードします。私はこの関数ですべてのファイル名を得ることができます:ドキュメントディレクトリでビデオの再生時間を取得する方法

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

そして、これらのファイルのすべての時間長を取得したいと思います。私がしようと何をお見せしましょう:

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) 
} 

出力は、私は私のビデオファイルのURLを取得しようとすると、私は間違っていた私の意見では

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 

です。しかし、それを修正する方法。私はたくさんのことを試します。ファイルが存在するかどうかをチェックします。それはどこに存在しますか。

はまた、私はあなたがNSURLにURLをキャストするべきではありません

+0

あなたは何を得るのですか? – rmaddy

+0

無関係ですが、なぜNSURLで本当に悪いキャスティングをしているのですか? – rmaddy

+0

こんにちはマディ、その0(ゼロ)も... – Antiokhos

答えて

2

...とにかく、既にソリューションをありがとうございました

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

unfortunetelyそれは動作しません。..

を試してみてください。ドキュメントディレクトリのURLを取得し、ファイル名と拡張子を追加してください。それに加えて、あなたはdoubleですCMTime秒プロパティを取得し、適切に"h m s"形式で時刻を表示するString(format:)メソッドを使用することができます:あなたは `代わりmediaTime``のtotalSeconds`を印刷する場合

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

うん。ありがとうございました。また、悪いnsurlキャストを訂正していただきありがとうございます – Antiokhos

+0

あなたは歓迎です –

関連する問題