2017-06-10 3 views
2

HLSライブストリーミング用のSwiftにiOSアプリケーションを作成しています。再生中に各HLSセグメントリクエストが開始されたとき(およびそれぞれのURLが何であるか)に、自分のアプリロジックに通知する必要があります。私はKVOを使用してAVPlayerとAVPlayerItemのさまざまなプロパティの変更を観察しようとしました。それは、再生がいつ開始されるかを私に知らせるだけです。たとえば、次のオブザーバを追加すると、再生開始時にobserveValueメソッドが呼び出されますが、各セグメント要求が継続的に通知される方法は見つかりませんでした。SwiftでのHLSセグメント要求の通知を取得

playerItem.addObserver(自己、forKeyPath: "ステータス"、オプション:NSKeyValueObservingOptions()、コンテキスト:ゼロ)

は私が各セグメント要求を通知できるようにする必要がありますKVOを持つ方法はありますか?私は考慮すべきAVFoundationに関連しない他のオブジェクト/ APIがありますか?

/ジョージ・

答えて

0

それが起こっている間、私は、各セグメント要求を通知するための簡単な方法を知りません。 AVPlayerItemaccessLogプロパティを見て、ログのAVPlayerItemAccessLogEventsを見てください。これらは、ネットワークイベントと再生イベントの両方を記述します。私はあなたのニーズに合っているなら、このアプローチを強く勧めます。

また、アプリケーションをHTTPサーバーとして設定し、ローカルサーバーにAVURLAsset/AVPLayerItemを指定すると、これらの要求を外部サーバーに変換する必要があります。これははるかに複雑で、難しく、エラーが起こりやすく、性能が悪いことがほぼ保証されています。しないでください。


補遺:

それはあなたがAVURLAssetに代わってリソース要求を処理することができます言うようにあなたはAVAssetResourceLoaderDelegateを見たいと思われるかもしれません。残念ながら、それはセグメントのローダーを通過しません。それはプレイリスト、解読キー、および他のそのような資産のためにあるようです。

+0

AVPlayerItemAccessLogEventsに設定されたURIは、実際の要求がts/fMP4オブジェクト用であっても(extendedLogData()と同じ)、子プレイリストを指します。残念ながら、accessLog経由で利用できるセグメントURI:sを見つけることができません。 –

関連する問題