如何在 swiftUI 中播放来自 http 数据流的音频?
Posted
技术标签:
【中文标题】如何在 swiftUI 中播放来自 http 数据流的音频?【英文标题】:How to play audio from an http data stream in swiftUI? 【发布时间】:2021-07-20 22:52:11 【问题描述】:我现在开发 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。 【参考方案1】:使用 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”
【讨论】:
我已经在 info.plist 文件中实现了这个异常,但似乎是另一个问题,谢谢。【参考方案2】:对于从 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 初始化播放器,祝你好运。
【讨论】:
以上是关于如何在 swiftUI 中播放来自 http 数据流的音频?的主要内容,如果未能解决你的问题,请参考以下文章
来自先前选择器的选择器值 - CoreData/SwiftUI
如何在 SwiftUI 中显示来自 API 的 JSON 数据?