2011-08-05 20 views
8

En mi aplicación de iOS estoy intentando exportar un archivo mp3 de la biblioteca de iPod al directorio de documentos de la aplicación en el dispositivo. Actualmente estoy tratando de usar AVAssetExportSession pero no está funcionando para mp3 archivos. Funciona bien para archivos m4a.¿Cómo puedo exportar un archivo mp3 desde la biblioteca de iPod de un dispositivo iOS?

  • ¿Es posible exportar un archivo mp3 usando AVAssetExportSession?

  • ¿Cuál es el outputFileType apropiado para AVAssetExportSession? (AVFileTypeAppleM4A obras para archivos m4a)

Gracias!

Respuesta

1

Estoy enfrentando el mismo problema. Lamentablemente, ninguno de los marcos de iOS (AVFoundation, CoreMedia, etc.) admite la codificación de MP3.

una respuesta a una similar question sugerimos usar el Lame Encoder y another question menciona que algún usuario era capaz de compilar es éxito para iOS ("acabo de intento de construir la biblioteca estática para LAME y confirmó que 'funciona' .. . ").

Otra alternativa sería ir con FFMpeg. Parece que algunos usuarios lo han compilado satisfactoriamente para iOS 4.3 (ver this reference).

Tenga en cuenta que puede que tenga que pagar regalías por la codificación de MP3. Además, las licencias de FFMpeg/Lame pueden impedirle usar su código en una aplicación de código cerrado.

¡Buena suerte!

+3

Esta respuesta no es correcta. Si está exportando un archivo MP3 desde la biblioteca, ya está codificado, no necesita volver a codificar en mp3. He utilizado QuickTimeMovie como el tipo de archivo para exportar con éxito mp3 de la biblioteca al sistema de archivos. – Dermot

+0

@Dermot puede compartir el código. . Estoy haciendo lo mismo en Swift, pero no la suerte, por favor ayuda –

+0

Noviembre de 1999: LAME cambia de una licencia GPL a una licencia LGPL, lo que permite su uso con aplicaciones de código cerrado. – Dalmazio

0

Parece AVAssetExportSession sólo es compatible con los tipos de archivos mp3 para la transcodificación con com.apple.quicktime- película (.mov) y com.apple.coreaudio formato (.caf) usando el preset AVAssetExportPresetPassthrough. También debe asegurarse de usar una de estas extensiones de archivo al escribir su archivo de salida, de lo contrario no se guardará.

Apoyado tipo de archivo de salida y extensiones para un archivo de MP3 están en negrita (probado en OS X 10.11.6):

  • com.apple.quicktime-película (.mov)
  • com .apple.m4a-audio (.m4a)
  • public.mpeg-4 (.mp4)
  • com.apple.m4v-video (.m4v)
  • org.3gpp.adaptive-multi-tasa-de audio (.amr)
  • com.microsoft.waveform-audio (.wav)
  • public.aiff-audio (AIFF)
  • public.aifc-audio (.aifc)
  • com.apple.coreaudio-formato (.CAF)
0

aquí el código que le ayudará a exportar un mp4 de la biblioteca de música

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 
       } 
      }) 
     } 
    } 
Cuestiones relacionadas