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

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

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

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

Спасибо!


person SundayMonday    schedule 05.08.2011    source источник


Ответы (3)


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

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

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

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

Удачи!

person urish    schedule 26.08.2011
comment
Этот ответ неверен. Если вы экспортируете файл MP3 из библиотеки, он уже закодирован, вам не нужно снова кодировать в mp3. Я использовал QuickTimeMovie в качестве типа файла для успешного экспорта mp3 из библиотеки в файловую систему. - person Dermot; 18.08.2012
comment
@Dermot, не могли бы вы поделиться кодом. . я делаю то же самое в Swift, но не повезло, пожалуйста, помогите - person Usama Sadiq; 29.07.2015
comment
Ноябрь 1999: LAME переходит с лицензии GPL на лицензию LGPL, что позволяет использовать ее с приложениями с закрытым исходным кодом. - person Dalmazio; 17.09.2016
comment
Это можно сделать с помощью AVAssetExportSession с типом файла QuickTime и типом файла Core Audio. Вам просто нужно убедиться, что выходной файл имеет правильное расширение (.mov или .caf), иначе он не будет сохранен. Более подробную информацию можно найти здесь . - person Dalmazio; 17.09.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-аудио (.m4a)
  • общедоступный.mpeg-4 (.mp4)
  • com.apple.m4v-видео (.m4v)
  • org.3gpp.adaptive-multi-rate-audio (.amr)
  • com.microsoft.waveform-аудио (.wav)
  • public.aiff-аудио (.aiff)
  • public.aifc-аудио (.aifc)
  • com.apple.coreaudio-format (.caf)
person Dalmazio    schedule 17.09.2016

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