swift - 如何在 Swift 中为 Radio Live Streaming 服务实现 HLS
问题描述
我正在尝试使用 AVPlayer 制作广播生活流媒体服务。
我的网址是
http://player.absoluteradio.co.uk/tunein.php?i=a664.aac
但是 AVPlayer 不播放它...我知道该 url 不提供音频流,但它在第一个标头响应中返回一个可播放的 URL。我认为 AVPlayer 要么处理请求,要么让我拦截标头,但事实并非如此。
有谁知道如何实现它?
解决方案
我试图用不同的方法播放 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>
它奏效了!
推荐阅读
- node.js - 如何获取 API 请求的会话数据?
- node.js - 对于使用 docker 容器的 mongodb 的节点应用程序,什么最适合?
- c - C - 双类型变量:相同的公式,不同的值
- android - 在 Android 中使用 kotlin 语言进行西班牙语本地化
- html - Bootstrap 4 - 使用 2 个元素实现 flex + justify-content-center
- objective-c - 如何在object-c中实现类似Java中ByteBuffer的功能
- jquery - 调整窗口屏幕大小时仍保留在那里
- ios - iOS 联系人 - 在没有权限(或权限 UI)的情况下保存单个联系人
- c# - 异步数据库调用 - 比同步慢
- c++ - 安装std命名空间源码了解实现(Linux GCC)