8

私の iOS アプリケーションでは、MP3ファイルを iPod ライブラリからデバイス上のアプリのドキュメント ディレクトリにエクスポートしようとしています。現在、AVAssetExportSessionを使用しようとしていますが、 mp3ファイルでは機能しません。m4aファイルに適しています。

  • AVAssetExportSession を使用して mp3 ファイルをエクスポートできますか?

  • AVAssetExportSessionの適切なoutputFileTypeは何ですか? ( AVFileTypeAppleM4Aは m4a ファイルで動作します)

ありがとう!

4

3 に答える 3

1

私は同じ問題に直面しています。残念ながら、iOS フレームワーク (AVFoundation、CoreMedia など) は MP3 へのエンコードをサポートしていません。

同様の質問への回答では、 Lame Encoderの使用が提案されており、別の質問では、一部のユーザーが iOS 用に正常にコンパイルできたことが言及されています (「LAME 用の静的ライブラリを構築しようとして、それが「機能する」ことを確認しました... 」)。

別の代替手段は、FFMpeg を使用することです。一部のユーザーは、iOS 4.3 用に正常にコンパイルしたようです (このリファレンスを参照してください)。

MP3 のエンコードには使用料を支払う必要がある場合があることを考慮してください。また、FFMpeg/Lame のライセンスにより、クローズド ソース アプリケーションでそれらのコードを使用できない場合があります。

幸運を!

于 2011-08-26T17:20:17.437 に答える
0

音楽ライブラリから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
                }
            })
        }
    }
于 2017-11-16T10:41:33.873 に答える