2017-06-10 60 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。 –