2011-08-05 15 views
8

W mojej aplikacji iOS próbuję wyeksportować plik mp3 z biblioteki iPoda do katalogu dokumentów aplikacji na urządzeniu. Obecnie próbuję użyć AVAssetExportSession, ale to nie działa dla plików mp3. Działa dobrze dla plików m4a.Jak mogę wyeksportować plik mp3 z biblioteki iPoda urządzenia iOS?

  • Czy eksportowanie pliku MP3 możliwe jest przy użyciu AVAssetExportSession?

  • Jaki jest odpowiedni outputFileType dla AVAssetExportSession? (AVFileTypeAppleM4A prace dla plików m4a)

Dzięki!

Odpowiedz

1

Mam do czynienia z tym samym problemem. Niestety, nie frameworków iOS (AVFoundation, CoreMedia, itp.) Obsługuje kodowanie do MP3.

odpowiedzią na similar question sugerujemy użycie Lame Encoder i another question wspomina, że ​​jakiś użytkownik był w stanie skompilować jest sukcesem dla iOS ("I właśnie próbował zbudować statyczną bibliotekę LAME i potwierdził, że«działa».. . ").

Inną alternatywą byłoby przejście z FFMpeg. Wygląda na to, że niektórzy użytkownicy pomyślnie skompilowali go na iOS 4.3 (zobacz this reference).

Weź pod uwagę, że może być konieczne płacenie tantiem za kodowanie MP3. Ponadto licencje na FFMpeg/Lame mogą uniemożliwić korzystanie z ich kodu w aplikacji o zamkniętym kodzie źródłowym.

Powodzenia!

+3

Ta odpowiedź nie jest poprawna. Jeśli eksportujesz plik MP3 z biblioteki, jest on już zakodowany, nie musisz ponownie kodować do pliku mp3. Użyłem QuickTimeMovie jako typu pliku, aby pomyślnie wyeksportować plik mp3 z biblioteki do systemu plików. – Dermot

+0

@Dermot możesz podzielić się tym kodem. . Robię to samo w Swift, ale nie na szczęście, pomóż –

+0

Listopad 1999: LAME przełącza się z licencji GPL na licencję LGPL, co pozwala na używanie jej z aplikacjami o zamkniętym kodzie źródłowym. – Dalmazio

0

Wydaje AVAssetExportSession obsługuje tylko dla typów plików mp3 transkodowania z com.apple.quicktime-filmu (.mov) i com.apple.coreaudio formacie (.caf) stosując AVAssetExportPresetPassthrough preset. Musisz również pamiętać, aby użyć jednego z tych rozszerzeń plików podczas zapisywania pliku wyjściowego, inaczej nie zostanie zapisany.

Obsługiwane filetype wyjście i rozszerzenia dla pliku mp3 wejściowego są pogrubione (testowane na OS X 10.11.6):

  • com.apple.quicktime-film (.mov)
  • com .apple.m4a audio (.m4a)
  • public.mpeg-4 (mP4)
  • com.apple.m4v wideo (.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)
0

tutaj kod, który pomoże Ci wyeksportować mp4 z biblioteki muzycznej

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 
       } 
      }) 
     } 
    } 
Powiązane problemy