swift - AVAudioPlayer 没有播放任何东西

标签 swift url avfoundation avaudioplayer document-directory

我有一个 tableViewCell,我想在其中播放通常为 .m4a 的声音。 我在全局范围内声明了我的 AVAudioPlayer 实例,如下所示:

var player = AVAudioPlayer()

然后我下载我的声音,把它放在 Documents 的一个目录中。但是,当我尝试从目录播放我的声音文件时,我得到了这个错误:

Open failed
The operation couldn’t be completed. (OSStatus error 2003334207.)

这是我的代码我不知道你有什么问题。我在模拟器中找到了可以用 QuickTimePlayer 播放的文件。

func downloadSound(_ message: ChatVoiceMessageStructure) {
    guard let url = service?.networkManager.CDNURL else { return }
    let doanloadURL = URL(string: url.appending(message.name!))
    let docUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL!
    let desURL = docUrl.appendingPathComponent("tmpsong.m4a")
    var downloadTask:URLSessionDownloadTask
    let request = URLRequest(url: doanloadURL!)
    downloadTask = URLSession.shared.downloadTask(with: request, completionHandler: { [weak self](URLData, response, error) -> Void in
        do{
            let isFileFound:Bool? = FileManager.default.fileExists(atPath: desURL.path)
            if isFileFound == true{
                print(desURL) //delete tmpsong.m4a & copy
            } else {
                try FileManager.default.copyItem(at: URLData!, to: desURL)
            }
            let sPlayer = try AVAudioPlayer(contentsOf: desURL)
            self?.player = sPlayer
            self?.player.prepareToPlay()
            self?.player.play()

        } catch let err {
            print(err.localizedDescription)
        }

    })
    downloadTask.resume()

}

最佳答案

多亏了 MAhipal,我终于解决了这个问题。问题是 AVAudioPlayer 不能播放某种音频格式。比如当音频扩展名是 MPEG4 但音频编码不是 AAC 时。所以要注意 AVAudioPlayer 支持的格式。你可以在 CoreAudio 类,AudioFormatID 的子类中找到这些。这花了我几个星期的时间来解决希望它可以节省一些时间。 如果你想播放其他类型,你可以使用 AVPlayer

这些是 future 引用的类型:

public var kAudioFormatLinearPCM: AudioFormatID { get }
public var kAudioFormatAC3: AudioFormatID { get }
public var kAudioFormat60958AC3: AudioFormatID { get }
public var kAudioFormatAppleIMA4: AudioFormatID { get }
public var kAudioFormatMPEG4AAC: AudioFormatID { get }
public var kAudioFormatMPEG4CELP: AudioFormatID { get }
public var kAudioFormatMPEG4HVXC: AudioFormatID { get }
public var kAudioFormatMPEG4TwinVQ: AudioFormatID { get }
public var kAudioFormatMACE3: AudioFormatID { get }
public var kAudioFormatMACE6: AudioFormatID { get }
public var kAudioFormatULaw: AudioFormatID { get }
public var kAudioFormatALaw: AudioFormatID { get }
public var kAudioFormatQDesign: AudioFormatID { get }
public var kAudioFormatQDesign2: AudioFormatID { get }
public var kAudioFormatQUALCOMM: AudioFormatID { get }
public var kAudioFormatMPEGLayer1: AudioFormatID { get }
public var kAudioFormatMPEGLayer2: AudioFormatID { get }
public var kAudioFormatMPEGLayer3: AudioFormatID { get }
public var kAudioFormatTimeCode: AudioFormatID { get }
public var kAudioFormatMIDIStream: AudioFormatID { get }
public var kAudioFormatParameterValueStream: AudioFormatID { get }
public var kAudioFormatAppleLossless: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_HE: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_LD: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_ELD: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_ELD_SBR: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_ELD_V2: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_HE_V2: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_Spatial: AudioFormatID { get }
public var kAudioFormatAMR: AudioFormatID { get }
public var kAudioFormatAMR_WB: AudioFormatID { get }
public var kAudioFormatAudible: AudioFormatID { get }
public var kAudioFormatiLBC: AudioFormatID { get }
public var kAudioFormatDVIIntelIMA: AudioFormatID { get }
public var kAudioFormatMicrosoftGSM: AudioFormatID { get }
public var kAudioFormatAES3: AudioFormatID { get }
public var kAudioFormatEnhancedAC3: AudioFormatID { get }
public var kAudioFormatFLAC: AudioFormatID { get }
public var kAudioFormatOpus: AudioFormatID { get }

关于swift - AVAudioPlayer 没有播放任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53338368/

相关文章:

php - 从无序列表中的 href 中提取 URL 并使用 PHP 插入 mysql

ios - 按下 UITableView "cell"时在文档中加载音频

ios - 将视频的音频转换为 AAC

swift - 在 do/catch block 中引用变量时使用未解析的标识符

swift - 无法在一个 View 单元格中使用两个不同的 TableView 单元格

ruby - 访问 Nokogiri HTML 文档的当前 URI

ios - 如何在 Swift 中的相机层顶部添加文本框?

ios - 如何在钥匙串(keychain)中保存应用购买状态

swift - 如何使用 xcode 修复内存泄漏 (Swift 3)

php - .htaccess - 如何隐藏 .php 网址?