You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift4中如何从服务器播放MP3音频?测试函数报错求助

解决Swift 4中从服务器播放MP3音频的问题

你遇到的报错其实是两个核心问题导致的,咱们一步步拆解解决:

1. 错误的URL构造方式

你用了URL(fileURLWithPath: soundUrl)这个方法,它是专门用来构造本地文件路径URL的,而服务器音频地址是网络资源,必须用URL(string: soundUrl)来创建网络URL,这是最直接的错误点。

2. AVAudioPlayer不适合网络音频播放

AVAudioPlayer的设计定位是本地音频文件播放,它不支持流式加载网络音频,这也是你在真实设备上触发报错的关键原因。针对网络音频,苹果官方推荐使用AVPlayer,它专门适配了网络流媒体的播放需求。

正确的实现代码

首先确保你已经导入AVFoundation框架,然后替换成下面的代码:

import AVFoundation

// 重要:把AVPlayer实例声明为类的属性/全局变量,不能放在函数里当局部变量,否则会被立即释放导致无法播放
var audioPlayer: AVPlayer?

func playSound(soundUrl: String) {
    guard let audioUrl = URL(string: soundUrl) else {
        print("传入的音频URL格式无效")
        return
    }
    
    let playerItem = AVPlayerItem(url: audioUrl)
    audioPlayer = AVPlayer(playerItem: playerItem)
    audioPlayer?.play()
}

额外必看注意事项

  • ATS配置:如果你的音频地址是HTTP协议(非HTTPS),iOS 10及以上系统默认的App Transport Security(ATS)会拦截HTTP请求。需要在Info.plist中添加例外:
    右键Info.plist → 选择"Add Row",添加App Transport Security Settings,再在其下添加Allow Arbitrary Loads并设置为YES。
  • 错误监听优化:可以给AVPlayerItem添加状态监听,捕获加载失败的具体原因,示例代码如下:
    playerItem.addObserver(self, forKeyPath: "status", options: [.new], context: nil)
    
    // 实现监听回调方法
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        guard keyPath == "status", let item = object as? AVPlayerItem else {
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
            return
        }
        
        switch item.status {
        case .failed:
            print("音频加载失败:\(item.error?.localizedDescription ?? "未知错误")")
        case .readyToPlay:
            print("音频准备完成,开始播放")
        case .unknown:
            print("音频状态未知,正在加载中")
        @unknown default:
            break
        }
    }
    

按照上面的修改,你应该就能正常播放服务器上的MP3音频了。

内容的提问来源于stack exchange,提问作者user9212972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:30:48