как получить физическое местоположение файла песни в библиотеке iPod в iOS

У меня есть ссылка на MPMediaItem, когда пользователь выбирает аудио из библиотеки iPod. я получаю URL-адрес актива этого элемента, используя

[mediaItem valueForProperty: MPMediaItemPropertyAssetURL]

Но это не дает мне точное физическое местоположение файла, вместо этого он дает мне URL-адрес библиотеки iPod.

ipod-library://item/item.mp3?id=1840064795502796074

Есть ли способ получить физический адрес песни из библиотеки iPod?

EDIT - на самом деле я хочу извлечь NSData из физического файла и отправить его на свой внутренний сервер, поэтому мне нужен URL-адрес физического файла, а не относительный URL-адрес.


person A for Alpha    schedule 08.01.2013    source источник
comment
он всегда возвращал вам URL-адрес для воспроизведения в другом медиаплеере   -  person Aman Aggarwal    schedule 08.01.2013
comment
на самом деле я хочу извлечь NSData из физического файла и отправить его на мой внутренний сервер, поэтому мне нужен URL-адрес физического файла, а не относительный URL-адрес   -  person A for Alpha    schedule 08.01.2013
comment
Он не предоставит вам абсолютный путь, он всегда возвращает URL-адрес или относительный путь. Я много искал по этому поводу, но ничего не нашел. Я также пытался сделать данные из URL, но это дало 0 байтов   -  person Aman Aggarwal    schedule 08.01.2013
comment
оооо.. Итак, как вам удалось преобразовать аудиофайл в NSData?   -  person A for Alpha    schedule 08.01.2013
comment
я не делал, мы оставили эту функцию...   -  person Aman Aggarwal    schedule 08.01.2013


Ответы (1)


Это будет работать, но немного медленно. Кроме того, это написано для новых классов MP:

// song is an instance of MPMediaItem

if let val = song.value(forKey: MPMediaItemPropertyAssetURL) as? URL {
   let asset = AVURLAsset.init(url: val)

   if asset.isExportable {
      let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetAppleM4A)

      let exportPath: NSString = NSTemporaryDirectory().appendingFormat("/\(UUID().uuidString).m4a") as NSString
      let exportUrl: NSURL = NSURL.fileURL(withPath: exportPath as String) as NSURL

      exportSession?.outputURL = exportUrl as URL
      exportSession?.outputFileType = AVFileTypeAppleM4A
      exportSession?.exportAsynchronously(completionHandler: {
          // do some stuff with the file
          do {
            try FileManager.default.removeItem(atPath: exportPath as String!)
          } catch {

       }
}
person Eric Levy    schedule 23.05.2017