如何在 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 句柄?