在我的iOS应用程序中,我正在尝试将 mp3 文件从iPod库导出到设备上的应用程序文档目录。目前我正在尝试使用 AVAssetExportSession ,但它不适用于 mp3 文件。它适用于 m4a 文件。
使用AVAssetExportSession导出mp3文件吗?
AVAssetExportSession适当的 outputFileType 是什么? ( AVFileTypeAppleM4A 适用于m4a文件)
谢谢!
答案 0 :(得分:1)
我面临同样的问题。不幸的是,没有iOS框架(AVFoundation,CoreMedia等)支持MP3编码。
similar question建议使用Lame Encoder和another question提及某些用户能够成功编译的答案(“我刚刚尝试构建静态库对于LAME并确认它“有效”......“)。
另一种选择是与FFMpeg一起使用。似乎有些用户已成功为iOS 4.3编译它(参见this reference)。
考虑到您可能需要为MP3编码支付版税。此外,FFMpeg / Lame的许可证可能会阻止您在闭源应用程序中使用其代码。
祝你好运!答案 1 :(得分:0)
似乎AVAssetExportSession
仅支持使用 com.apple.quicktime-movie (。mov)和 com.apple.coreaudio-format 进行mp3转码的文件类型(.caf)使用AVAssetExportPresetPassthrough
预设。在编写输出文件时,您还必须确保使用其中一个文件扩展名,否则将无法保存。
mp3输入文件支持的输出文件类型和扩展名以粗体显示(在OS X 10.11.6上测试):
答案 2 :(得分: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
}
})
}
}