2016-01-20 67 views
-2

我不想使用pathExtension來做到這一點,因爲它並不嚴格。我通過文件頭區分了圖像文件,但是我找不到任何有關MP3/MP4的信息。如何區分MP3,MP4文件?

(無論是斯威夫特或OC是OK)

+0

這個問題含糊其辭。 「分裂」是什麼意思?將文件分割成幾部分或將其顯示在表格或視圖中或? –

+0

@MichaelDautermann謝謝,我的意思是不同的文件。 – Lumialxk

回答

3

要確定它是mp3,請查看該文件的前兩個或三個字節。 If it's 49 44 33 or ff fb, you have a mp3

And a signature of ftyp may indicate a .mp4 file

下面是一些銀行代碼我工作了用於此目的:

import Foundation 

var c = 0; 
for arg in Process.arguments { 
    print("argument \(c) is: \(arg)") 
    c++ 
} 

let pathToFile = Process.arguments[1] 

do { 
    let fileData = try NSData.init(contentsOfFile: pathToFile, options: NSDataReadingOptions.DataReadingMappedIfSafe) 

    if fileData.length > 0 
    { 
     let count = 8 

     // create array of appropriate length: 
     var array = [UInt8](count: count, repeatedValue: 0) 

     // copy bytes into array 
     fileData.getBytes(&array, length:count * sizeof(UInt8)) 

     var st = String(NSString(format:"%02X %02X %02X %02X %02X %02X %02X %02X", 
      array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7])) 

     // 49 44 33 is mp3 

     // 
     print("first \(count) bytes are \(st)") 

     // f t y p seems to determine a .mp4 file 
     st = String(NSString(format:"%c %c %c %c %c %c %c %c", 
      array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7])) 

     print("first \(count) bytes are \(st)") 
    } 
} catch let error as NSError { 
    print("error while trying to read from \(pathToFile) - \(error.localizedDescription)") 
} 
+0

謝謝,我會試試這個。 – Lumialxk

1

你會想要做你的圖像做了什麼,用在兩個文件中的頭信息,以確定它是否是一個MP3文件或MP4文件。這裏有關於mp4頭部的信息:Anyone familiar with mp4 data structure?