2011-08-05 12 views
8

मेरे आईओएस एप्लिकेशन में मैं डिवाइस पर ऐप की दस्तावेज़ निर्देशिका में आईपॉड लाइब्रेरी से एमपी 3 फ़ाइल निर्यात करने का प्रयास कर रहा हूं। वर्तमान में मैं AVAssetExportSession का उपयोग करने की कोशिश कर रहा हूं लेकिन यह एमपी 3 फ़ाइलों के लिए काम नहीं कर रहा है। यह m4a फ़ाइलों के लिए अच्छी तरह से काम करता है।मैं आईओएस डिवाइस की आईपॉड लाइब्रेरी से एमपी 3 फ़ाइल कैसे निर्यात कर सकता हूं?

  • AVAssetExportSession का उपयोग कर एक एमपी 3 फ़ाइल निर्यात करना संभव है?

  • AVAssetExportSession के लिए उपयुक्त outputFileType क्या है? (AVFileTypeAppleM4A m4a फ़ाइलों के लिए काम करता है)

धन्यवाद!

उत्तर

1

मुझे एक ही समस्या का सामना करना पड़ रहा है। दुर्भाग्य से, आईओएस फ्रेमवर्क (AVFoundation, CoreMedia, आदि) में से एमपी 3 को समर्थन एन्कोडिंग नहीं।

एक similar question का उत्तर Lame Encoder उपयोग करने का सुझाव है, और another question का उल्लेख है कुछ उपयोगकर्ता संकलित करने के लिए iOS के लिए सफलतापूर्वक है कर रहा था कि ("मैं सिर्फ लंगड़ा के लिए स्थिर पुस्तकालय का निर्माण करने का प्रयास किया और पुष्टि की है कि यह काम करता है 'है .. । ")।

एक अन्य विकल्प एफएफएमपीईजी के साथ जाना होगा। ऐसा लगता है कि कुछ उपयोगकर्ताओं ने इसे सफलतापूर्वक आईओएस 4.3 के लिए संकलित किया है (this reference देखें)।

ध्यान रखें कि आपको एमपी 3 एन्कोडिंग के लिए रॉयल्टी का भुगतान करना पड़ सकता है। इसके अलावा, एफएफएमपीईजी/लमेम के लिए लाइसेंस आपको बंद कोड स्रोत में अपने कोड का उपयोग करने से रोक सकते हैं।

शुभकामनाएं!

+3

इस उत्तर से एक mp4 निर्यात करने के लिए सही नहीं है। यदि आप लाइब्रेरी से एमपी 3 फ़ाइल निर्यात कर रहे हैं, तो यह पहले से ही एन्कोड किया गया है, आपको फिर से एमपी 3 को एन्कोड करने की आवश्यकता नहीं है। मैंने लाइब्रेरी से फ़ाइल सिस्टम में सफलतापूर्वक एमपी 3 निर्यात करने के लिए फ़ाइल प्रकार के रूप में QuickTimeMovie का उपयोग किया है। – Dermot

+0

@ डर्मोट क्या आप कोड साझा कर सकते हैं। । मैं स्विफ्ट में ऐसा कर रहा हूं लेकिन भाग्य नहीं, कृपया –

+0

नवंबर 1 999 में मदद करें: एलएमएल लाइसेंस से एलजीपी लाइसेंस से एलएएम स्विच स्विच करता है, जो इसे बंद-स्रोत अनुप्रयोगों के साथ उपयोग करने की अनुमति देता है। – Dalmazio

0

ऐसा प्रतीत होता है AVAssetExportSession केवल com.apple.quicktime फिल्म साथ एमपी 3 ट्रांसकोडिंग के लिए फ़ाइल प्रकारों का समर्थन करता है (.mov) और com.apple.coreaudio प्रारूप (.caf) AVAssetExportPresetPassthrough पूर्व निर्धारित का उपयोग कर। आपको अपनी आउटपुट फ़ाइल लिखते समय इन फ़ाइल एक्सटेंशन में से किसी एक का उपयोग करना भी सुनिश्चित करना होगा अन्यथा यह सहेज नहीं पाएगा।

एक एमपी 3 इनपुट फ़ाइल के लिए आउटपुट फ़ाइल प्रकार और एक्सटेंशन समर्थित में हैं बोल्ड (पर ओएस एक्स 10.11.6 परीक्षण किया):

  • com.apple.quicktime फिल्म (.mov)
  • कॉम .apple.m4a-ऑडियो (.m4a)
  • public.mpeg -4 (.mp4)
  • com.apple.m4v-वीडियो (.m4v)
  • org.3gpp.adaptive-बहु दर-ऑडियो (.amr)
  • com.microsoft.waveform-ऑडियो (.wav)
  • public.aiff-ऑडियो (.aiff)
  • public.aifc-ऑडियो (.aifc)
  • com.apple.coreaudio-स्वरूप (।सीएएफ)
0

यहाँ कोड आप में मदद मिलेगी संगीत पुस्तकालय

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 
       } 
      }) 
     } 
    } 
संबंधित मुद्दे