You need to enable JavaScript to run this app. SwiftUI中如何通过URL链接而非本地.mp3文件播放音频
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何通过URL链接而非本地.mp3文件播放音频

解决方案

可以直接通过URL播放网络音频,你当前代码无法实现的核心原因是AVAudioPlayer仅支持加载本地文件资源,不支持远程网络URL加载,同时代码还存在方法名不匹配、资源读取逻辑错误的问题,改用AVPlayer即可实现需求。

可直接运行的修改后代码

import SwiftUI
import AVFoundation

struct AudioTest: View {
    @State private var song1 = false
    // 用AVPlayer替代AVAudioPlayer支持远程播放
    @State private var audioPlayer: AVPlayer?
    
    var body: some View {
        Image(systemName: song1 ? "pause.circle.fill": "play.circle.fill")
            .font(.system(size: 25))
            .padding(.trailing)
            .onTapGesture {
                // 首次点击时初始化播放器
                if audioPlayer == nil {
                    guard let url = URL(string: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3") else {
                        print("无效的音频链接")
                        return
                    }
                    let playerItem = AVPlayerItem(url: url)
                    audioPlayer = AVPlayer(playerItem: playerItem)
                }
                
                song1.toggle()
                if song1 {
                    audioPlayer?.play()
                } else {
                    audioPlayer?.pause()
                }
            }
    }
}

struct AudioTest_Previews: PreviewProvider {
    static var previews: some View {
        AudioTest()
    }
}

注意事项

  • 如果需要加载HTTP协议的音频链接,需要在项目的Info.plist中添加配置:新增App Transport Security Settings字典,在字典内添加Allow Arbitrary Loads字段并设为YES,否则系统会默认拦截HTTP请求。
  • 网络音频播放依赖网络状态,建议后续补充加载状态提示、播放失败异常处理逻辑,优化用户体验。
  • 播放器实例建议不要定义为全局变量,正式项目中可以放在@StateObject修饰的视图模型中管理,避免出现内存泄漏、多页面播放冲突的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:06:08