我正在Swift中为HLS实时流媒体编写一个iOS应用程序 . 我希望在回放期间启动每个HLS段请求时通知我的应用程序逻辑(以及相应的URL是什么) . 我试图观察使用KVO对AVPlayer和AVPlayerItem的各种属性的更改 . 但是,它只会告诉我何时启动播放 . 例如,添加以下观察者会在回放开始时触发observeValue方法的调用,但我还没有找到一种方法可以不断通知每个段请求 .
playerItem.addObserver(self,forKeyPath:“status”,options:NSKeyValueObservingOptions(),context:nil)
是否有一种KVO方法可以让我收到每个段请求的通知?是否有其他对象/ API:我应该考虑与AVFoundation无关?
/乔治
2 回答
我没有发生这样的事情 . 你应该查看
AVPlayerItem
的accessLog属性并查看日志中的AVPlayerItemAccessLogEvents . 这些将描述网络和回放事件 . 如果符合您的需求,我强烈推荐这种方法 .另一种方法是将您的应用程序设置为HTTP服务器,并在本地服务器上指向
AVURLAsset
/AVPLayerItem
,然后必须将这些请求转换为外部服务器 . 这更加复杂,困难,容易出错,几乎可以保证性能不佳 . 请不要这样做 .附录:
您可能很想查看AVAssetResourceLoaderDelegate,因为它表示您可以代表
AVURLAsset
处理资源请求 . 不幸的是,它不会通过装载程序进行分段 . 它似乎适用于播放列表,解密密钥和其他此类资产 .当我需要调试HLS流时,我遵循Fabian的方法 . 每次有与当前正在播放的流相关的更新时,它都会显示有用的信息 . 这是我使用的代码,希望它可以帮助任何面临类似问题的人!