如何在 Swift 中为 Radio Live Streaming 服务实现 HLS

Posted

技术标签:

【中文标题】如何在 Swift 中为 Radio Live Streaming 服务实现 HLS【英文标题】:How to implement a HLS for Radio Live Streaming service in Swift 【发布时间】:2018-10-15 11:19:01 【问题描述】:

我正在尝试使用 AVPlayer 制作广播生活流媒体服务。

我的网址是

http://player.absoluteradio.co.uk/tunein.php?i=a664.aac

但是 AVPlayer 不播放它...我知道该 url 不提供音频流,但它在第一个标头响应中返回一个可播放的 URL。我认为 AVPlayer 要么处理请求,要么让我拦截标头,但它没有。

有人知道如何实现吗?

【问题讨论】:

【参考方案1】:

我尝试用不同的方法播放 url,但我发现了一些让 AVPlayer 工作的东西,但仍然不知道幕后发生了什么......

我的第一种方法是初始化 AVPlayer 并设置 AVURLAsset 资源加载器委托,但是,由于保留/标准 url 方案不会触发委托,我陷入了死胡同……

其次,在这样实现 AVPlayer 之后:

class ViewController: UIViewController, AVAssetResourceLoaderDelegate 

    let urlFile = URL(string:"http://player.absoluteradio.co.uk/tunein.php?i=a664.aac")!

    private var avPlayer:AVPlayer!
    private var avAudiosession:AVAudioSession = AVAudioSession.sharedInstance()

    override func viewDidLoad() 
        super.viewDidLoad()

        try! avAudioSession.setCategory(.playback, mode: .default, options: [])
        try! avAudioSession.setActive(true)

        let audioURLAsset = AVURLAsset(url: urlFile)
        //audioURLAsset.resourceLoader.setDelegate(self, queue:DispatchQueue.init(label: "MY QUEUE"))
        avPlayer = AVPlayer(playerItem: AVPlayerItem(asset: audioURLAsset))

        avPlayer.play()

    


我允许在我的 info.plist 中任意加载

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

它成功了!

【讨论】:

以上是关于如何在 Swift 中为 Radio Live Streaming 服务实现 HLS的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的精灵套件游戏 Swift 中为所有 iPhone 获得相同的布局尺寸

播放现场 TuneIn Radio URL iOS Swift

swift 如何在Swift中为UITextField设置填充。

如何在 Swift 中为以下观察删除 GeoFire 句柄?

如何在 Swift 中为以下观察删除 GeoFire 句柄?

如何在 Swift 中为 UIBarButtonItem 设置动作