Caching Videos Renvoyer 206 sur AEM Dispatcher s’exécutant sur le serveur Apache

Nous sums confrontés à des problèmes lors de la tentative de mise en cache de vidéos sur AEM Dispatcher. Nous utilisons dispatcher 4.1.2 sur le serveur http Apache 2.2.

Les vidéos sont diffusées correctement et fonctionnent sur tous les navigateurs, mais elles ne sont PAS mises en cache lorsqu’elles sont visualisées depuis Chrome / Firefox, mais elles sont correctement mises en cache lorsqu’elles sont affichées dans IE. La différence que nous voyons entre les navigateurs est que lorsque l’utilisateur ouvre une vidéo sur Internet Explorer, il charge tout d’abord la vidéo complète, puis commence à jouer et retourne donc 200 comme code de réponse. Lorsque chrome / firefox lit les vidéos, il utilise la demande de plage et les vidéos complètes sont chargées par le navigateur dans une requête à plages multiples renvoyant 206 comme code de réponse.

C’est tout ce que je sais jusqu’à présent et je soupçonne qu’en raison de demandes partielles faites par chrome / firefox, le répartiteur ne cache pas la vidéo.

Tout pointeur pour résoudre ce problème serait vraiment utile!

Cependant, nous avons personnellement ignoré les vidéos de mise en cache sur le répartiteur car nous utilisons désormais CDN pour mettre en cache les vidéos, mais si quelqu’un souhaite également mettre en cache des vidéos sur le répartiteur, voici la solution proposée. travail.

Le cache vidéo fonctionne en fonction du comportement du navigateur: Dispatcher est utilisé pour mettre en cache des éléments tels que des images / pages / vidéos, etc. Dans certaines conditions, le répartiteur met en mémoire cache le contenu qu’il dessert. les vidéos sont lues dans différents navigateurs, il utilise une approche différente pour lire les vidéos.

Lorsque la vidéo est jouée avec Chrome et Firefox, elle utilise la stratégie de contenu partiel pour charger et lire la vidéo, c’est-à-dire qu’elle envoie une requête au serveur pour obtenir une partie de la vidéo rapidement. la requête qui renvoie une partie de la vidéo avec le code d’état 206 (succès avec un contenu partiel). Ainsi, pour lire une vidéo, le navigateur (Chrome et Firefox) effectue des requêtes à plages multiples, chacune renvoyant un code d’état 206 et une partie de la vidéo, car la vidéo n’est pas mise en cache lorsqu’elle est accessible via ces navigateurs. Le navigateur lui-même parvient à lire toute la vidéo en combinant ces parties.

Maintenant, en cas d’IE, le comportement est un peu différent. Au lieu de faire des demandes de plage partielle, il demande de télécharger la vidéo complète en premier et une fois la vidéo entière téléchargée, elle commence à lire la vidéo. Ainsi, dans ce cas, le serveur renvoie le fichier vidéo avec le code d’état 200, que le répartiteur considère comme pouvant être mis en cache et, par conséquent, met la vidéo en cache. Donc, lorsque la vidéo sera lue par le navigateur IE, elle sera mise en cache en raison de ce comportement.

Solution possible: sur la base du comportement expliqué ci-dessus, les vidéos jouées avec Chrome / Firefox ne seront pas mises en cache sur le répartiteur alors que les mêmes vidéos diffusées avec Internet Explorer seront mises en cache. Maintenant, si nous voulons toujours faire le cache vidéo, quel que soit le navigateur dans lequel il est joué, nous devons nous moquer du comportement des requêtes pour charger les vidéos en implémentant un morceau de code spécial appelé Cache Warming Script. Ce script ne changera pas le comportement du navigateur. Ce script sera déclenché dès qu’une vidéo est activée à partir de l’auteur, ce qui déclencherait un événement de vidage du répartiteur pour cette vidéo, et nous attraperions cet événement et lancerions notre script. Ce script fera une demande de téléchargement de la vidéo intégrale avec les mêmes en-têtes que ceux utilisés par IE, c’est-à-dire qui, à leur tour, mettraient automatiquement la vidéo en cache sur le répartiteur. Tout ce que nous faisons est de rendre le cache vidéo juste après sa publication et de ne pas attendre qu’il soit mis en cache lorsqu’il est lu via un navigateur.