无法使用 AVAudioPlayer 播放存储在文档目录中的本地 mp3 文件

Posted

技术标签:

【中文标题】无法使用 AVAudioPlayer 播放存储在文档目录中的本地 mp3 文件【英文标题】:Unable to play local mp3 file stored in documents directory using AVAudioPlayer 【发布时间】:2017-09-06 10:07:41 【问题描述】:

我有一个在三星安卓设备上生成的 mp3 音频文件。我从服务器下载相同的文件并存储在文档目录中。现在我使用下面的代码来播放这个音频文件。 iAudioFileURL 是我在外部用于设置音频文件 url 的属性。设置 url 后,我使用下面的代码为该 url 设置 AVAudioPlayer

var iAudioFileURL : URL?
    didSet
        if let audioFileURL = iAudioFileURL 
            if audioFileURL.isFileURL 
                if let previousURL = iAVAudioPlayer?.url 
                    if previousURL.path == audioFileURL.path 
                        return
                    
                

                self.stopPlayer()
                self.iToolBar.items?[0] = iPlayButton

                do 
                    try AVAudiosession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [AVAudioSessionCategoryOptions.mixWithOthers, AVAudioSessionCategoryOptions.duckOthers])
                    try AVAudioSession.sharedInstance().setActive(true)
                    try iAVAudioPlayer = AVAudioPlayer(contentsOf: audioFileURL)
                 catch  let error as NSError 
                    iError = error
                    return
                
                iError = nil
                iAVAudioPlayer?.prepareToPlay()
                self.iProgressSlider.minimumValue = 0
                if let duration = self.iAVAudioPlayer?.duration 
                    let durationNumber = NSNumber(floatLiteral: duration)
                    self.iProgressSlider.maximumValue = durationNumber.floatValue
                
             else 
                print("Path:\(iAudioFileURL?.path) is not a file url")
            

        
    

该代码适用于其他文件,但对于从该设备生成的所有 mp3 文件都无法播放。 我有一个按钮可以触发 AVAudioPlayer 实例的播放方法。 我已经提到了来自 *** 的大部分问题和答案。他们没有为我的案件提供解决方案。即使是方法也不会抛出错误。请帮帮我。你可以找到文件here

【问题讨论】:

你是如何生成 mp3 文件的? @SaurabhJain 我正在录制文件 如何将文件保存为mp3格式?可能不是保存为mp3格式 @SaurabhJain 已经录制了它的 mp3。然后它上传到服务器,正如我已经确认的那样,它没有转换为任何其他格式。然后我使用 URLSession 任务下载它。那我试试玩。 试试看不是mp3格式录制的,我确定。 【参考方案1】:

问题是即使扩展名是 mp3,文件的 mimetype 也是 audio/x-hx-aac-adts。在此线程中 [https://discussions.apple.com/thread/2365009?tstart=0][1] varjak paw 回复

据我所知,iTunes 不支持 ADTS 中的 AAC (音频数据传输流),只有 MPEG-4 中的 AAC。你需要找到 在 iTunes 能够之前将这些文件转换为 MPEG-4 的转换器 阅读它们。抱歉,我无法提供有关转换器的任何建议 试试看。

问候。

因此,这清楚地表明不支持具有 mimetype audio/x-hx-aac-adts 的文件。 您可以在 mac 上打开终端并使用以下命令获取文件的 mimetypes

文件 --mime-type -b myfile.extension

【讨论】:

以上是关于无法使用 AVAudioPlayer 播放存储在文档目录中的本地 mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 AVAudioPlayer 播放专辑

AVAudioPlayer 无法播放使用 ExtAudioFileWriteAsync 编写的音频 (.wav) 文件

AVAudioPlayer 在播放视频时无法识别设备静音按钮

离开视图后无法使用 AVAudioPlayer 播放 AVAudioRecorder

无法在 swift 4 中使用 avaudioplayer 播放 http 音频

Mac 上的 AVAudioPlayer 无法播放/崩溃