Bonjour Ă tous. Des dizaines d'appels diffĂ©rents sont ouverts quotidiennement dans notre support, de simples questions «aider Ă mettre en place un cluster» Ă trĂšs complexes «le flux ne fonctionne pas, le flux parfois bĂ©gaie», mais il y a des questions dont l'Ćil se contracte dĂ©jĂ et chaque employĂ© de l'entreprise peut rĂ©pondre en dĂ©tail.
Et comme les questions ne s'arrĂȘtent pas, vous pouvez donc rĂ©pondre ici.
Pourquoi la vidéo est-elle retardée?
Nous avons deux articles sur le blog (
un ,
deux ) sur ce sujet, lisez-les si vous travaillez avec la vidéo, et ici je vais donner une réponse courte et complÚte:
Le streaming Internet moderne est un
protocole HLS . Parfois DASH, mais ce n'est pas important, car ils sont tous deux segmentés.
Comment ça marche? La vidéo en streaming est "coupée" en petits fichiers (généralement de 2 à 8 secondes, selon la dynamique du contenu), 3 à 10 de ces segments sont accumulés et décrits par une liste de lecture spéciale, qui est automatiquement mise à jour lorsque l'ancien segment est supprimé et qu'un nouveau est ajouté. Si simple. Plus de segments - délai plus long, durée plus longue de chaque segment - délai plus long. 10-20 secondes est normal.
Pourquoi est-ce nécessaire? Pourquoi stocker autant de vidéos dans la mémoire du serveur vidéo? La segmentation permet au joueur de ne pas réagir à l'instabilité de la connexion Internet, de ne pas interrompre la vidéo lors du passage d'un réseau Wi-Fi à une connexion mobile. Si la vidéo n'avait pas été préparée à l'avance et emballée dans des fichiers séparés, alors au moindre problÚme ou manque de bande passante, nous aurions des artefacts vidéo à l'écran, et la segmentation donne au lecteur environ 4 à 20 secondes pour rétablir la connexion du lecteur et charger de nouvelles données.
Que faire si vous avez besoin d'une vidéo sans délai? Choisissez un protocole différent si vous avez l'intention d'organiser un chat Web, de contrÎler l'hélicoptÚre via Internet, de regarder des caméras vidéo IP. Voici des exemples: WebRTC, MSE-LD, RTMP.
Comment protéger la vidéo? Coller uniquement sur votre site
La tĂąche est trĂšs simple - la vidĂ©o sur le site doit ĂȘtre protĂ©gĂ©e contre toute insertion dans d'autres sites, personne ne veut payer pour le trafic de quelqu'un d'autre, le trafic vidĂ©o coĂ»te cher. Et la vidĂ©o peut ĂȘtre privĂ©e et ne doit pas dĂ©passer votre compte personnel.
J'ai toujours une réponse à toutes ces demandes - vous
devez configurer Securelink sur votre site. La protection du contenu n'est pas possible unilatĂ©ralement - le site lui-mĂȘme doit gĂ©nĂ©rer des liens, vous ne pouvez pas simplement prendre et insĂ©rer un lien statique vers le site.
Securelink est une technologie de protection des liens ancienne et trÚs efficace. De nombreux habruchitel connaissent un module spécial pour Nginx - ngx_http_secure_link_module. Nous n'utilisons pas Nginx, mais il existe une implémentation similaire et non moins efficace, la seule différence est dans l'ordre des paramÚtres.
Comment ça marche? Le site génÚre un lien
unique unique basé sur les données des utilisateurs. Et que sait le serveur Web sur le client? C'est vrai, c'est l'adresse IP, l'agent utilisateur, le cookie, l'URL demandée. Si le client est autorisé, dans les variables de session, vous pouvez obtenir d'autres informations, par exemple, un ID client unique dans la base de données de service ou, par exemple, la période de validité de l'abonnement.
Nous collectons les paramÚtres sur une seule ligne et hachons avec votre algorithme préféré, par exemple, SHA1. Il s'avÚre un ensemble de personnages inutiles. Par exemple, le hachage de la chaßne «127.0.0.1Habr» serait: 70ebe94671dd21bd65f4a00dfd988adc83fe6bda.
Cette ligne sera transmise au streamer vidĂ©o et sa tĂąche sera de vĂ©rifier la validitĂ© du lien, qu'il a Ă©tĂ© gĂ©nĂ©rĂ© par votre site, n'est pas «pourri» et n'est pas transmis Ă des tiers. Il n'y a aucun retour du site, donc le streamer vidĂ©o doit gĂ©nĂ©rer un hachage en utilisant les mĂȘmes donnĂ©es que le site Web utilisĂ©. Le streamer vidĂ©o connaĂźt Ă©galement l'adresse IP du client, le contenu demandĂ©, mais ne peut en aucun cas connaĂźtre l'ID utilisateur ou la durĂ©e de vie du lien. Vous devrez transfĂ©rer ces donnĂ©es directement sur le lien et utiliser la clĂ© secrĂšte afin que personne ne puisse gĂ©nĂ©rer de liens pour lui-mĂȘme.
Nous prenons la ligne "127.0.0.1Habr1540327100SECRET" et obtenons SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515, et maintenant nous formons un lien du formulaire:
example.com/Habr/index.m3u8?token=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100example.com est votre serveur vidéo, Habr est la vidéo demandée, index.m3u8 est le nom standard de la liste de lecture HLS, le jeton de valeur est la chaßne du serveur Web que nous avons générée.
Le streamer vidĂ©o extrait facilement de ces donnĂ©es tout ce qui est nĂ©cessaire pour obtenir le mĂȘme hachage: l'adresse IP est lue Ă partir de la variable du serveur web, le contenu demandĂ© de l'URL, la durĂ©e de vie provient du paramĂštre token, la seule chose qui lui manque est la clĂ© secrĂšte, elle devra inscrivez-vous dans le fichier de configuration et gardez le secret.
Vous ne pourrez pas envoyer un tel lien à un ami ou l'ouvrir dans un autre navigateur - il y a une adresse IP dans la formule de hachage, et vous ne réussirez pas à remplacer la durée de vie - alors le hachage ne correspondra pas.
PiĂšges
Je voulais vraiment dĂ©crire en deux paragraphes, mais en bref, cela n'a pas fonctionnĂ©. C'est le premier problĂšme - tout le monde n'est pas prĂȘt Ă se plonger dans de tels dĂ©tails, car il est beaucoup plus facile d'insĂ©rer un lien statique. Nous
avons des exemples prĂȘts Ă l'emploi sur notre
site , donc il ne devrait pas y avoir de problĂšme.
Il arrive souvent que le site et le serveur Web dĂ©terminent incorrectement l'adresse IP du client, ce qui est normal si des rĂ©seaux CDN sont utilisĂ©s, par exemple CloudFlare. Dans ce cas, vous devez prendre l'adresse IP de l'en-tĂȘte correct, vous pouvez avoir besoin de l'aide du fournisseur CDN. Par exemple, CloudFlare a CF-Connecting-IP.
Mauvais moment. Une heure incorrecte sur l'un des serveurs, combinée à des tentatives de minimiser la durée de vie du lien, conduit souvent à des liens rompus. Il arrive également que l'utilisateur laisse l'onglet ouvert pendant plusieurs heures, puis ne puisse pas lire la vidéo en raison de la courte durée de vie.
Durée de vie des liens de 3 à 24 heures - c'est normal, ils sont protégés de toute façon et il existe des moyens de limiter le nombre de vues simultanées.
Au lieu d'un total
Dites-nous dans les commentaires comment contourner ce mécanisme de protection des liens?