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

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

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

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

Спасибо!

3 ответа

Решение

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

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

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

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

Удачи!

Здесь код, который поможет вам экспортировать 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
                }
            })
        }
    }

Кажется 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)
Другие вопросы по тегам