Как я могу экспортировать файл mp3 из библиотеки iPod устройства iOS? - PullRequest
8 голосов
/ 05 августа 2011

В моем приложении для iOS я пытаюсь экспортировать файл mp3 из библиотеки iPod в каталог документов приложения на устройстве.В настоящее время я пытаюсь использовать AVAssetExportSession , но он не работает для mp3 файлов.Он хорошо работает для m4a файлов.

  • Возможен ли экспорт mp3-файла с использованием AVAssetExportSession?

  • Что подходит outputFileType для AVAssetExportSession?( AVFileTypeAppleM4A работает для файлов m4a)

Спасибо!

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Я столкнулся с той же проблемой. К сожалению, ни одна из платформ iOS (AVFoundation, CoreMedia и т. Д.) Не поддерживает кодирование в MP3.

Ответ на аналогичный вопрос предлагает использовать Lame Encoder , а другой вопрос упоминает, что какой-то пользователь смог скомпилировать успешно для iOS (" Я только что попытался собрать статическую библиотеку для LAME и подтвердил, что она «работает» ... ").

Другая альтернатива - использовать FFMpeg. Похоже, что некоторые пользователи успешно скомпилировали его для iOS 4.3 (см. эту ссылку ).

Примите во внимание, что вам, возможно, придется платить роялти за кодировку MP3. Кроме того, лицензии для FFMpeg / Lame могут помешать вам использовать их код в приложении с закрытым исходным кодом.

Удачи!

0 голосов
/ 16 ноября 2017

здесь код, который поможет вам экспортировать mp4 из музыкальной библиотеки

func displayMediaPicker() {
        let mediaPicker = MPMediaPickerController.init(mediaTypes: .anyAudio)
        mediaPicker.delegate = self
        mediaPicker.allowsPickingMultipleItems = false
        mediaPicker.loadView();
        self.present(mediaPicker, animated: true, completion: nil)
    }

func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
        //
        self.dismiss(animated:true)

        if mediaItemCollection.count > 0 {

            let mediaItem = mediaItemCollection.items[0]
            let assetURL = mediaItem.value(forProperty: MPMediaItemPropertyAssetURL)
            let mediaAsset = AVURLAsset(url: assetURL as! URL, options: nil)

            let exporter = AVAssetExportSession.init(asset: mediaAsset, presetName: AVAssetExportPresetMediumQuality)
            exporter?.outputFileType = AVFileType.mp4

            let mediaPathToSave = //assign destination path here

            let exportURL = URL(fileURLWithPath: mediaPathToSave)
            exporter?.outputURL = exportURL

            // if incase you need first 30 seconds
            let startTime = CMTimeMake(0, 1)
            let stopTime = CMTimeMake(30, 1)
            let exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime)
            exporter?.timeRange = exportTimeRange

            exporter?.exportAsynchronously(completionHandler: { 
                //
                let status = exporter?.status

                if status == AVAssetExportSessionStatus.completed {

                    print("AVAssetExportSessionStatus successfull")
                    //do further code for exported file here
                }
            })
        }
    }
0 голосов
/ 17 сентября 2016

Похоже AVAssetExportSession поддерживает только типы файлов для транскодирования mp3 с com.apple.quicktime-movie (.mov) и com.apple.coreaudio-format (.caf)используя пресет AVAssetExportPresetPassthrough.Вы также должны обязательно использовать одно из этих расширений файлов при записи выходного файла, иначе оно не сохранится.

Поддерживаемый тип выходного файла и расширения для входного mp3-файла выделены жирным шрифтом (протестировано на OS X 10.11.6):

  • com.apple.quicktime-movie (.mov)
  • com.apple.m4a-audio (.m4a)
  • public.mpeg-4 (.mp4)
  • com.apple.m4v-video (.m4v)
  • org.3gpp.adaptive-multi-rate-audio (.amr)
  • com.microsoft.waveform-audio (.wav)
  • public.aiff-audio (.aiff)
  • public.aifc-audio (.aifc)
  • com.apple.coreaudio-format (.caf)
...