2017-06-10 4 views
2

Je suis en train d'écrire une application iOS dans Swift pour la diffusion en direct HLS. Je souhaite que ma logique d'application soit notifiée lorsque chaque requête de segment HLS est lancée pendant la lecture (et quelle est l'URL correspondante). J'ai essayé d'observer des changements aux diverses propriétés d'AVPlayer et d'AVPlayerItem en utilisant KVO. Cependant, cela ne m'informe que lorsque la lecture est lancée. Par exemple, l'ajout de l'observateur suivant déclenche une invocation de la méthode observerValue lorsque la lecture commence, mais je n'ai pas trouvé un moyen d'être informé en permanence de chaque demande de segment.Recevoir des notifications sur les demandes de segments HLS dans Swift

playerItem.addObserver (auto, forKeyPath: "statut", les options: NSKeyValueObservingOptions(), contexte: néant)

Y at-il une méthode avec KVO qui devrait me permettre d'être informé de chaque demande de segment? Existe-t-il d'autres objets/API: s que je devrais envisager d'utiliser AVFoundation?

/George

Répondre

0

Je ne sais pas d'un moyen facile d'être informé de chaque demande de segment alors qu'il se passe. Vous devriez regarder la propriété accessLog de AVPlayerItem et regarder le AVPlayerItemAccessLogEvents dans le journal. Ceux-ci décrivent les événements de réseau et de lecture. Je recommande fortement cette approche si cela correspond à vos besoins.

Une autre méthode consiste à configurer votre application en tant que serveur HTTP et à pointer un AVURLAsset/AVPLayerItem sur le serveur local, qui devra ensuite traduire ces demandes vers un serveur externe. C'est beaucoup plus complexe, difficile, sujet aux erreurs, et il est presque garanti d'avoir de mauvaises performances. S'il vous plaît ne faites pas cela.


addendum

:

Vous pourriez être tenté de regarder AVAssetResourceLoaderDelegate comme il est dit que vous pouvez gérer les demandes de ressources pour le compte d'un AVURLAsset. Malheureusement, il ne passe pas par le chargeur pour les segments. Il semble être pour les listes de lecture, les clés de décryptage et d'autres atouts.

+0

L'URI défini pour AVPlayerItemAccessLogEvents pointe vers la liste de lecture enfant même si la requête actuelle concerne des objets ts/fMP4 (même chose pour extendedLogData()). Impossible de trouver le segment URI: s être disponible via accessLog malheureusement. –