如何在 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 数据流的音频?的主要内容,如果未能解决你的问题,请参考以下文章

如何快速播放来自http数据流的音频

来自先前选择器的选择器值 - CoreData/SwiftUI

如何在 SwiftUI 中显示来自 API 的 JSON 数据?

如何在 SwiftUI 中一键连续播放两种声音

AVPlayer - 如何以编程方式打开/关闭来自 HTTP Live Streaming 视频的 CC?

在swiftui中按钮的触摸动作播放音频