如何在 swiftUI 中播放来自 http 数据流的音频?

How to play audio from an http data stream in swiftUI?

我正在开发 RadioStream 应用程序。我使用 SwiftAudioPLayer 框架,但几秒钟后播放器停止了。因此,在 swiftUI 中播放来自 HTTP 流的音频可能是一种不同的方式。 或者我需要将代码从 Uikit 迁移到 swiftUI 吗?

我是 swiftUI 和 iOS 开发的新手,感谢您提前回复。谢谢!

SwiftAudioPlayer框架代码,代码来源:https://github.com/tanhakabir/SwiftAudioPlayer#realtime-audio-manipulation***

如何在 swiftUI 中播放广播流 URL 文件?

 
    import SwiftUI
    import SwiftAudioPlayer
    
    
     func playMusic() {
            let url = URL(string:"http://online.radiorecord.ru:8102/rus_128")!
            SAPlayer.shared.startRemoteAudio(withRemoteUrl: url)
            SAPlayer.shared.play()
        }
    }

使用 https 而不是您正在使用的 http,因为:

"iOS 9.0 和 macOS 10.11 及更高版本使用 App Transport Security (ATS) 对于使用 URLSession 建立的所有 HTTP 连接。 ATS 要求 HTTP 连接使用 HTTPS (RFC 2818)。"

但是;

“您可以通过添加 NSAppTransportSecurity 键到您应用的信息 属性 列表 文件并提供 ATS 配置字典作为值。"

也就是在Info.plist文件中添加例外。

参见“https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity”

对于播放来自 URL 的音频,我创建了这个答案。希望能帮到一些人。

import AVFoundation

...

 var player = AVPlayer()
 var playerItem: AVPlayerItem!


func initPlayer(url: String) {
        guard let url = URL.init(string: url) else { return }
        let playerItem = AVPlayerItem(url: url)
        player = AVPlayer.init(playerItem: playerItem)
        player.play()
       
    }

 func play() {
        isPlaying.toggle()
        player.play()
    }

初始化播放器使用你的 URL,祝你好运。