Eigene Videoplattform oder wie man viele Computerressourcen beansprucht. Teil 1

Auf dem Foto - das erste fliegende Allrad. Quelle

Aufgrund der Verfügbarkeit der erforderlichen Dienste ist das Posten von Videos im Netzwerk heute keine schwierige Aufgabe. Es gibt jedoch nicht so viele Materialien zur internen Struktur solcher Systeme, insbesondere im russischsprachigen Segment.

Ich bin seit einiger Zeit am Design und der Entwicklung einer hochwertigen Videoplattform beteiligt. In diesem Artikel möchte ich jene Momente beschreiben, die ich selbst zu Beginn der Entwicklung wissen möchte.

Der Artikel beansprucht keinen Führungsstatus. Ich werde versuchen, nur interessante oder nicht offensichtliche Punkte zu beschreiben, die sich auf die Verarbeitung und Bereitstellung von HTML5-basierten Videoinhalten auswirken.
Das Material richtet sich an Personen, die sich bereits mit dem Thema befassen oder nach einer Aufschlüsselung der Abkürzungen, Begriffe und Konzepte suchen.

Der zweite Teil.

Formatieren


H264 Trotz seiner Beliebtheit stellt sich heraus, dass es nicht überall funktioniert - einige Browser bieten keine Unterstützung. Glücklicherweise funktioniert VP8 / 9 auf modernen Geräten fast überall dort, wo H264 nicht unterstützt wird. VP9 ist vorzuziehen, da Ich habe keine älteren Versionen von Decodern gesehen, die VP8 können, aber nicht VP9 oder H264. VP9 bietet eine vergleichbare Bildqualität wie H264, wenn die Bitrate um ~ 30% niedriger ist - dies ist wichtig, um die Belastung der Kanäle zu verringern. Wenn die Verwendung des MPEG-Codecs möglicherweise rechtliche Ansprüche hat (eine sehr komplizierte Geschichte), ist VP9 damit gut zurechtgekommen. Zwar ist die Codierungsgeschwindigkeit von VP9 um eine Größenordnung niedriger, daher müssen mehr Ressourcen für seine Verarbeitung zugewiesen werden.

Wenn alte Geräte unterstützt werden müssen, die mit H264 High nicht umgehen können, können Sie als drittes Format 480p H264 Main mit einer niedrigeren Bitrate hinzufügen.

Hi10P ist aufgrund der schlechten Hardware-Dekodierungsunterstützung massiv besser nicht zu verwenden.
Für H265 sind natürlich Lizenzgebühren erforderlich, was nicht jedermanns Sache ist.

Weich gegen hart


Hardware-Encoder nutzen die meisten erweiterten Funktionen der Codecs nicht (spart Platz auf Chips) und geben nicht optimal codierte Dateien aus. Die Auswahl des Formats ist begrenzt, nicht alle können mit Codierungsparametern konfiguriert werden - oft gibt es von den Werten, die das Ergebnis wirklich beeinflussen, nur eine Bitrate, und selbst das wird sehr eigenartig wahrgenommen. Wenn alles so gemacht wird, wie es sollte, können Sie auf normalen Chips ein völlig vernünftiges Ergebnis mit einer linearen (Auswirkung in dynamischen Szenen) und einer etwas höheren Bitrate erzielen.

Und damit der Hardware-Encoder funktioniert, benötigen Sie natürlich ein Gerät - eine Grafikkarte oder einen Prozessor mit einem Videokern, der nicht auf allen Servern vorhanden ist.

Aber sie sind schnell. Sehr. Im Vergleich zur Softwareverarbeitung kann die Geschwindigkeit einige hundert Mal so hoch werden, dass die Festplatten-E / A möglicherweise nicht mehr ausreicht.

Die Verarbeitung mit Hardwaremethoden hängt stark vom Lösungsanbieter ab. Jeder Anbieter verfügt über eigene Bibliotheken und Dienstprogramme, und es stehen zahlreiche Optionen zur Auswahl: Intel Quick Sync, NVenc, AMD VCE.

Bei der Softwareverarbeitung gibt es keine derartigen Einschränkungen, und bei gleichwertiger Bitrate ist das Ergebnis besser. Für die Arbeit mit verschiedenen Formaten und Codecs gibt es ffmpeg; "Apparatschiks" haben keinen solchen Luxus (mit Vorbehalt).

Videoqualitätskriterien


Um die Zielqualität zu bestimmen, ist es am einfachsten, BPP-Bits pro Pixel einzulesen. Diese Einstellung ist unabhängig von Auflösung, Bildrate und Dauer. Berücksichtigen Sie dabei bereits die Bitrate nach der Formel
BPP * Framerate * Width * Height 
Die besten BPP-Werte werden am besten durch unabhängige Experimente für das Video ausgewählt, das Sie verarbeiten möchten. Ein guter Anfangswert für H264 liegt bei 0,09 bps. Bei Hochleistungscodecs wie H265 und VP9 kann dieser Parameter proportional zum vergleichenden Komprimierungsverhältnis reduziert werden. Außerdem kann der BPP für hochauflösende Videos leicht reduziert werden Die Effizienz von Codecs nimmt mit der Auflösung leicht zu. Bei dieser Korrektur müssen Sie jedoch die Auflösung des Codierungsabschnitts berücksichtigen (Slices, eine Funktion von Codecs, mit der Sie Videos mit halbunabhängigen fraktionalen Auflösungsblöcken codieren können).

Für die durch die obige Formel erhaltene Bitrate ist es ratsam, die Maximalwerte basierend auf der erwarteten Internetgeschwindigkeit des Clients vorab festzulegen. Nur wenige Menschen können ein sehr hochwertiges, aber ständig gepuffertes Video bequem ansehen.

Aus diesem Grund ist es unpraktisch, Q-Parameter von Codecs (Qualitätspapageien) zu verwenden - feste Werte ergeben eine unvorhersehbare endgültige Bitrate.

maxRate ist besser mit einem Rand gemacht, weil Codecs halten die erforderlichen Werte möglicherweise selbst bei Codierung mit zwei Durchgängen nicht genau ein.

Um die Qualität dynamischer Szenen aufrechtzuerhalten, ist es besser, den VBR-Modus von Codecs zu aktivieren. MinRate ist jedoch besser, mindestens 90% der Gesamtbitrate festzulegen, damit Ratenspitzen nicht zu Pufferunterläufen führen.

Dienstprogramme wie Intel VPA, ffprobe und Python sind bei der Qualitätskontrolle hilfreich. Mit letzterem ist es zweckmäßig, Vergleiche zwischen der Quelle und dem konvertierten Video anzustellen und beliebige Metriken wie die durchschnittliche Abweichung von Pixeln zu lesen.

Die Berechnung von PSNR und SSIM ist in der Praxis aufgrund psychovisueller Optimierungen, die standardmäßig in Codecs enthalten sind, äußerst ineffizient. Wenn Sie diese Metriken mehr oder weniger angemessen berechnen möchten, können Sie Optimierungen über deaktivieren
 -tune [psnr|ssim] 
Die endgültige Datei unterscheidet sich natürlich von der ohne diese Flags.

Vorschau


Das Hauptproblem beim Generieren von Miniaturbildern ist eine unscharfe Quelle. Die Definition und Suche nach klaren Bildern ist eine nicht triviale und ressourcenintensive Aufgabe. Glücklicherweise ist die Lösung für dieses Problem in den meisten Codecs im Videokodierungsprozess enthalten. Sie können den Keyframe nehmen, der einer bestimmten Position am nächsten liegt. Von allen Frames, die ihn umgeben, ist er der klarste. In ffmpeg kann dies folgendermaßen geschehen:

 -ss [] -vf \"select='eq(pict_type,PICT_TYPE_I)'\" -vsync vfr 

Standard-Encoder werden nicht optimal komprimiert. Nach dem Empfang des Bildes ist es daher besser, es mit etwas wie optipng zu quetschen, wodurch bei FHD-Voransichten durchschnittlich 500 KB eingespart werden.

Hochauflösende Bilder werden am besten interlaced gemacht. Daher werden wir die Größe leicht erhöhen (um 5-10%), aber die Anzeigezeit auf der Ladeseite erheblich verkürzen.

Der Artikel hat sich bereits als dicht herausgestellt, und ich habe Zweifel, dass alle Informationen in einem großen Text zusammengefasst werden müssen. Wenn Sie daran interessiert sind, dieses Thema fortzusetzen, schreiben Sie in die Kommentare oder markieren Sie in der Umfrage.

Die Plattform ist geschlossen, aber Sie können ihre Arbeit hier sehen .

* Ich habe keine Beziehung zu den Autoren der jeweiligen Websites und kann deren Ansichten und Meinungen nicht teilen. Ich kann die Entscheidungen darüber, wem und wie der Zugriff auf den Code gewährt wird, nicht kommentieren.

Bereit, Fragen zu beantworten.

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


All Articles