如何在Swift中为广播直播服务实现HLS

时间:2018-10-15 11:19:02

标签: swift avfoundation avkit

我正在尝试使用AVPlayer进行广播电台流媒体服务。

我的网址是

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

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

有人知道如何实现吗?

1 个答案:

答案 0 :(得分: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>

而且有效!