首页 > 解决方案 > 如何在 Swift 中为 Radio Live Streaming 服务实现 HLS

问题描述

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

我的网址是

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

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

有谁知道如何实现它?

标签: swiftavfoundationavkit

解决方案


我试图用不同的方法播放 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>

它奏效了!


推荐阅读