2011-08-05 32 views
8

Trong ứng dụng iOS của tôi, tôi đang cố gắng xuất tệp mp3 từ thư viện iPod vào thư mục tài liệu của ứng dụng trên thiết bị. Hiện tại tôi đang cố gắng sử dụng AVAssetExportSession nhưng không hoạt động cho mp3 tệp. Nó hoạt động tốt cho các tệp m4a.Làm cách nào để xuất tệp mp3 từ thư viện iPod trên thiết bị iOS?

  • Có thể xuất tệp mp3 bằng AVAssetExportSession không?

  • Thích hợp outputFileType cho AVAssetExportSession? (AVFileTypeAppleM4A công trình cho các tập tin m4a)

Cảm ơn!

Trả lời

1

Tôi đang đối mặt với cùng một vấn đề. Rất tiếc, không phải khung công tác iOS (AVFoundation, CoreMedia, v.v.) hỗ trợ mã hóa thành MP3.

Câu trả lời cho số similar question đề xuất sử dụng Lame Encoderanother question đề cập rằng một số người dùng có thể biên dịch thành công cho iOS ("Tôi vừa cố gắng xây dựng thư viện tĩnh cho LAME và xác nhận rằng nó 'hoạt động' .. . ").

Một giải pháp thay thế khác là đi với FFMpeg. Dường như một số người dùng đã biên dịch thành công cho iOS 4.3 (xem this reference).

Hãy xem xét rằng bạn có thể phải trả tiền bản quyền để mã hóa MP3. Ngoài ra, giấy phép cho FFMpeg/Lame có thể ngăn bạn sử dụng mã của họ trong một ứng dụng nguồn đóng.

Chúc may mắn!

+3

Câu trả lời này là không đúng. Nếu bạn đang xuất một tập tin MP3 từ thư viện, nó đã được mã hóa, bạn không cần phải mã hóa sang mp3 nữa. Tôi đã sử dụng QuickTimeMovie làm loại tệp để xuất thành công mp3 từ thư viện sang hệ thống tệp. – Dermot

+0

@Dermot bạn có thể vui lòng chia sẻ mã không. . Tôi đang làm tương tự trong Swift nhưng không may mắn xin vui lòng giúp –

+0

tháng 11 năm 1999: LAME chuyển từ giấy phép GPL sang giấy phép LGPL, cho phép sử dụng nó với các ứng dụng nguồn đóng. – Dalmazio

0

Có vẻ AVAssetExportSession chỉ hỗ trợ định dạng tập tin cho mp3 chuyển mã với com.apple.quicktime-phim (.mov) và com.apple.coreaudio định dạng (.caf) sử dụng AVAssetExportPresetPassthrough cài sẵn. Bạn cũng phải chắc chắn sử dụng một trong các phần mở rộng tệp này khi viết tệp đầu ra của bạn nếu không nó sẽ không lưu.

hỗ trợ đầu ra filetype và phần mở rộng cho một tập tin mp3 vào được in đậm (thử nghiệm trên OS X 10.11.6):

  • com.apple.quicktime-phim (.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-âm thanh (.wav)
  • public.aiff-audio (.aiff)
  • public.aifc-audio (.aifc)
  • com.apple.coreaudio-format (.caf)
0

đây mã mà sẽ giúp bạn xuất khẩu một mp4 từ thư viện nhạc

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