Worüber schreiben sie im technischen Support des Video-Streamers?

Hallo an alle. Täglich werden in unserem Support Dutzende verschiedener Anrufe geöffnet, von einfachen Fragen „Hilfe beim Einrichten eines Clusters“ bis zu sehr komplexen Fragen „Der Ablauf funktioniert nicht, der Ablauf ruckelt manchmal“, aber es gibt Fragen, bei denen das Auge bereits zuckt und jeder Mitarbeiter des Unternehmens im Detail antworten kann.

Und da die Fragen nicht aufhören, können Sie sie hier beantworten.

Warum wird das Video verzögert?


Wir haben zwei Artikel im Blog ( einer , zwei ) zu diesem Thema, lesen Sie sie, wenn Sie mit Videos arbeiten, und hier werde ich eine kurze und umfassende Antwort geben:

Modernes Internet-Streaming ist ein HLS-Protokoll . Manchmal DASH, aber das ist nicht wichtig, da beide segmentiert sind.

Wie funktioniert es Streaming-Videos werden in kleine Dateien "geschnitten" (normalerweise 2-8 Sekunden, abhängig von der Dynamik des Inhalts). 3-10 solcher Segmente werden akkumuliert und durch eine spezielle Wiedergabeliste beschrieben, die automatisch aktualisiert wird, wenn das alte Segment gelöscht und ein neues hinzugefügt wird. So einfach. Mehr Segmente - längere Verzögerung, längere Dauer jedes Segments - längere Verzögerung. 10-20 Sekunden sind normal.

Warum wird das benötigt? Warum so viele Videos im Speicher des Videoservers speichern? Durch die Segmentierung kann der Player nicht auf die Instabilität der Internetverbindung reagieren und das Video beim Wechsel von einem Wi-Fi-Netzwerk zu einer mobilen Verbindung nicht unterbrechen. Wenn das Video nicht im Voraus vorbereitet und in separate Dateien gepackt worden wäre, würden bei geringsten Störungen oder mangelnder Bandbreite Videoartefakte auf dem Bildschirm angezeigt, und die Segmentierung gibt dem Player etwa 4 bis 20 Sekunden Zeit, um die Verbindung des Players wiederherzustellen und neue Daten zu laden.

Was tun, wenn Sie unverzüglich ein Video benötigen? Wählen Sie ein anderes Protokoll, wenn Sie einen Web-Chat arrangieren, den Copter über das Internet steuern und IP-Videokameras ansehen möchten. Hier einige Beispiele: WebRTC, MSE-LD, RTMP.

Wie schütze ich das Video? Nur auf Ihrer Site einfügen


Die Aufgabe ist sehr einfach: Das Video auf der Website sollte vor dem Einfügen in andere Websites geschützt werden. Niemand möchte für den Datenverkehr eines anderen bezahlen. Der Videoverkehr ist teuer. Und das Video kann privat sein und sollte nicht über Ihr persönliches Konto hinausgehen.

Ich habe immer eine Antwort auf alle diese Anfragen - Sie müssen Securelink auf Ihrer Site konfigurieren . Inhaltsschutz ist nicht einseitig möglich - die Site selbst muss Links generieren, Sie können nicht einfach einen statischen Link zur Site nehmen und einfügen.

Securelink ist eine alte und hochwirksame Linkschutztechnologie. Viele habruchitel kennen ein spezielles Modul für Nginx - ngx_http_secure_link_module. Wir verwenden kein Nginx, aber es gibt eine ähnliche und nicht weniger effiziente Implementierung. Der einzige Unterschied besteht in der Reihenfolge der Parameter.

Wie funktioniert es Die Site generiert einen eindeutigen einmaligen Link basierend auf Benutzerdaten. Und was weiß der Webserver über den Client? Das ist richtig, dies ist die IP-Adresse, User-Agent, Cookie, die angeforderte URL. Wenn der Client autorisiert ist, können Sie in den Sitzungsvariablen andere Informationen abrufen, z. B. eine eindeutige Client-ID in der Servicedatenbank oder beispielsweise die Gültigkeitsdauer des Abonnements.

Wir sammeln die Parameter in einer Zeile und hashen mit Ihrem bevorzugten Algorithmus, zum Beispiel SHA1. Es stellt sich heraus, eine Reihe von nutzlosen Zeichen. Der Hash aus der Zeichenfolge "127.0.0.1Habr" lautet beispielsweise: 70ebe94671dd21bd65f4a00dfd988adc83fe6bda.

Diese Zeile wird an den Video-Streamer übertragen und hat die Aufgabe, die Gültigkeit des Links zu überprüfen, der von Ihrer Website generiert wurde, nicht "faul" ist und nicht an Dritte weitergegeben wird. Es gibt kein Feedback von der Website, daher sollte der Video-Streamer einen Hash mit denselben Daten generieren, die die Website verwendet hat. Der Video-Streamer kennt auch die IP-Adresse des Clients und den angeforderten Inhalt, kann jedoch weder die Benutzer-ID noch die Lebensdauer der Verbindung kennen. Sie müssen diese Daten direkt auf den Link übertragen und den geheimen Schlüssel verwenden, damit niemand für sich selbst Links generieren kann.

Wir nehmen die Zeile "127.0.0.1Habr1540327100SECRET" und erhalten SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515, und jetzt bilden wir einen Link des Formulars:

example.com/Habr/index.m3u8?token=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100

example.com ist Ihr Videoserver, Habr ist das angeforderte Video, index.m3u8 ist der Standardname für die HLS-Wiedergabeliste, das Werttoken ist die Zeichenfolge des von uns generierten Webservers.

Der Video-Streamer extrahiert auf einfache Weise alles aus diesen Daten, was zum Abrufen des gleichen Hashs erforderlich ist: Die IP-Adresse wird aus der Webservervariablen gelesen, der angeforderte Inhalt aus der URL, die Lebensdauer aus dem Token-Parameter, das einzige, was ihm fehlt, ist der geheime Schlüssel, den er benötigt Registrieren Sie sich in der Konfigurationsdatei und halten Sie es geheim.

Sie können einen solchen Link nicht an einen Freund senden oder in einem anderen Browser öffnen. Die Hashing-Formel enthält eine IP-Adresse, und es gelingt Ihnen nicht, die Lebensdauer zu ersetzen. Dann stimmt der Hash nicht überein.

Fallstricke


Ich wollte es wirklich in zwei Absätzen beschreiben, aber kurz gesagt, es hat nicht geklappt. Dies ist das erste Problem - nicht jeder ist bereit, sich mit solchen Details zu befassen, da es viel einfacher ist, einen statischen Link einzufügen. Wir haben fertige Beispiele auf unserer Website , daher sollte es kein Problem geben.

Es kommt häufig vor, dass die Site und der Webserver die IP-Adresse des Clients falsch ermitteln. Dies ist normal, wenn CDN-Netzwerke verwendet werden, z. B. CloudFlare. In diesem Fall müssen Sie die IP-Adresse aus dem richtigen Header entnehmen. Möglicherweise benötigen Sie die Hilfe des CDN-Anbieters. CloudFlare verfügt beispielsweise über CF-Connecting-IP.

Falsche Zeit. Eine falsche Zeit auf einem der Server führt in Kombination mit Versuchen, die Lebensdauer der Verbindung zu minimieren, häufig zu unterbrochenen Verbindungen. Es kommt auch vor, dass der Benutzer die Registerkarte mehrere Stunden lang offen lässt und das Video dann aufgrund der kurzen Lebensdauer nicht abspielen kann.

3-24 Stunden Verbindungslebensdauer - dies ist normal, sie sind trotzdem geschützt und es gibt Möglichkeiten, die Anzahl der gleichzeitigen Ansichten zu begrenzen.

Anstelle einer Summe


Sagen Sie uns in den Kommentaren, wie Sie diesen Linkschutzmechanismus umgehen können.

Source: https://habr.com/ru/post/de427499/


All Articles