2017-06-10 37 views
2

我正在为Swift编写一个iOS应用程序,用于HLS实时流式传输。我希望在播放期间启动每个HLS段请求时(以及相应的URL是什么),通知我的应用程序逻辑。我试图观察使用KVO对AVPlayer和AVPlayerItem的各种属性所做的更改。虽然,它只是告诉我何时开始播放。例如,添加以下观察者会在播放开始时触发observeValue方法的调用,但我没有找到一种方法来持续通知每个段请求。在Swift中获取HLS段请求的通知

playerItem.addObserver(个体经营,forKeyPath:“状态”,选择:NSKeyValueObservingOptions(),上下文:无)

是否与志愿的方法应该让我得到通知每个区段要求的?是否还有其他对象/ API:我应该考虑与AVFoundation无关?

/乔治

回答

0

我不知道一个简单的方法给每个区段要求的同时,它的发生通知。您应该查看AVPlayerItemaccessLog属性并查看日志中的AVPlayerItemAccessLogEvents。这些将描述网络和回放事件。如果它适合您的需求,我强烈推荐这种方法。

另一种方法是将您的应用程序设置为HTTP服务器,并指向本地服务器上的AVURLAsset/AVPLayerItem,然后该服务器必须将这些请求转换为外部服务器。这更复杂,更困难,更容易出错,并且几乎可以保证性能不佳。请不要这样做。


编:

你可能想看看AVAssetResourceLoaderDelegate,因为它说,你可以代表一个AVURLAsset的处理资源请求。不幸的是,它并没有通过装载程序的细分。这似乎是播放列表,解密密钥和其他此类资产。

+0

为AVPlayerItemAccessLogEvents设置的URI指向子播放列表,即使实际的请求是针对ts/fMP4对象(对于extendedLogData()也是如此)。不幸的是,无法通过accessLog找到段URI:s。 –