Eigene Videoplattform oder wie viel Rechenressourcen in Anspruch genommen werden. Teil 1

    Auf dem Foto - das erste Allradflieger. Quelle von

    Dank der Verfügbarkeit der erforderlichen Dienste ist das Platzieren von Videos im Netzwerk heute keine schwierige Aufgabe. Es gibt jedoch nicht so viele Materialien zum internen Design solcher Systeme, insbesondere im russischsprachigen Bereich.

    Ich beschäftige mich seit einiger Zeit mit der Entwicklung und Entwicklung einer hochwertigen Videoplattform. In diesem Artikel möchte ich die Momente beschreiben, die ich zu Beginn der Entwicklung erfahren möchte.

    Der Artikel gibt nicht den Status der Führung vor. In diesem Artikel werde ich nur interessante oder nicht offensichtliche Punkte beschreiben, die die Verarbeitung und Bereitstellung von Videoinhalten auf Basis von HTML5 beeinflussen.
    Das Material ist für diejenigen gedacht, die bereits im Thema sind oder bereit sind, Abkürzungen, Begriffe und Konzepte zu entschlüsseln.

    Der zweite Teil

    Formatieren


    H264 Trotz seiner Beliebtheit funktioniert es nicht überall - einige Browser bieten keine Unterstützung. Glücklicherweise funktioniert VP8 / 9 auf modernen Geräten fast überall, wo H264 nicht unterstützt wird. VP9 ist vorzuziehen, weil Alte Versionen von Decodern, die VP8, aber nicht VP9 oder H264 können, habe ich nicht getroffen. VP9 bietet vergleichbare Werte wie die H264-Bildqualität bei einer um 30% niedrigeren Bitrate. Dies ist wichtig, um die Belastung der Kanäle zu reduzieren. Wenn die Verwendung des MPEG-Codecs möglicherweise rechtliche Ansprüche haben kann (eine sehr komplizierte Geschichte), ist VP9 damit einverstanden. Die Kodierungsgeschwindigkeit von VP9 ist zwar um etwa eine Größenordnung niedriger, daher sollten mehr Ressourcen für die Verarbeitung zugewiesen werden.

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

    Es ist besser, Hi10P nicht in großen Mengen zu verwenden, da die Hardware-Decodierung nicht unterstützt wird.
    H265 wird natürlich Lizenzgebühren verlangen, was nicht jedermanns Sache ist.

    Weich gegen hart


    Hardware-Encoder verwenden die meisten erweiterten Funktionen der Codecs nicht (die Speicherplatzersparnis wirkt sich auf die Chips aus) und erzeugen nicht optimal verschlüsselte Dateien. Die Wahl des Formats ist begrenzt, es ist nicht alles möglich, die Codierungsparameter anzupassen - oft sind es nur die tatsächlichen Werte, die das Ergebnis beeinflussen, es gibt nur die Bitrate, und selbst diese wird auf eine sehr spezielle Weise wahrgenommen. Wenn alles so gemacht wird, wie es sollte, dann können Sie auf normalen Chips ein vernünftiges Ergebnis mit einem linearen Ergebnis (in dynamischen Szenen) und einer etwas zu hohen Bitrate erzielen.

    Damit ein Hardware-Encoder funktionieren kann, benötigen Sie natürlich ein Gerät - eine Videokarte oder einen Prozessor mit Videokern, die nicht auf allen Servern verfügbar sind.

    Aber sie sind schnell. Sehr Verglichen mit der Software-Verarbeitung kann die Geschwindigkeit einige hundert Mal so groß werden, dass möglicherweise nicht genügend Festplatten-E / A vorhanden sind.

    Die Verarbeitung durch Hardware hängt stark vom Lösungsanbieter ab. Jeder Anbieter verfügt über eigene Bibliotheken und Dienstprogramme, und es gibt die Wahl zwischen Intel Quick Sync, NVenc und AMD VCE.

    Bei der Software-Verarbeitung gibt es keine derartigen Einschränkungen, und bei einer äquivalenten Bitrate ist das Ergebnis besser. Um mit verschiedenen Formaten und Codecs zu arbeiten, gibt es ffmpeg. Der "apparatchik" hat keinen solchen Luxus (mit Vorbehalt).

    Kriterien für die Videoqualität


    Um die Zielqualität zu bestimmen, ist der einfachste Weg, in Bit pro Pixel zu zählen, BPP. Dieser Parameter ist unabhängig von Auflösung, Bildrate und Dauer. Von ihm zähle schon die Bitrate nach der Formel
    BPP * Framerate * Width * Height
    Optimale BPP-Werte werden am besten durch unabhängige Experimente unter dem Video ausgewählt, das Sie verarbeiten möchten. Ein guter Startwert für H264 liegt bei 0,09 Bit / Pixel. Bei Hochleistungscodecs wie H265 und VP9 kann dieser Parameter proportional zum Kompressionsvergleichsverhältnis reduziert werden. Außerdem kann BPP für hochauflösendes Video leicht reduziert werden, da Die Effizienz von Codecs steigt mit der Auflösung geringfügig an. Bei dieser Änderung muss jedoch die Auflösung des Codierungsabschnitts (Slices, ein Merkmal von Codecs, das die Codierung von Video mit halbunabhängigen, fraktionellen Auflösungsblöcken ermöglicht) berücksichtigt werden.

    Für die resultierende Bitratenformel ist es wünschenswert, die Maximalwerte basierend auf der erwarteten Internetgeschwindigkeit des Clients vorzugeben. Nur sehr wenige Menschen werden sich wohl fühlen, obwohl sie sehr hochwertig sind, jedoch ständig gepuffertes Video.

    Daher ist es unpraktisch, Q-Parameter von Codecs (Qualitätspapageien) zu verwenden - feste Werte ergeben eine unvorhersehbare Endbitrate.

    maxRate ist am besten mit einer Marge, weil Codecs können die erforderlichen Werte selbst bei der Zwei-Pass-Kodierung nicht genau beibehalten.

    Um die Qualität dynamischer Szenen zu erhalten, ist es besser, den VBR-Modus für Codecs zu aktivieren. MinRate sollte jedoch mindestens 90% der endgültigen Bitrate festlegen, damit Ratenspitzen nicht zu einer Pufferunterlaufrate führen.

    In der Qualitätskontrolle sind Dienstprogramme wie Intel VPA, ffprobe und Python hilfreich. Bei Verwendung des letzteren ist es zweckmäßig, Vergleiche des Quellcodes und des konvertierten Videos anzustellen, beliebige Metriken zu zählen, wie etwa die durchschnittliche Pixelabweichung.

    Die PSNR- und SSIM-Berechnung in der Praxis ist aufgrund der in Codecs standardmäßig enthaltenen psycho-visuellen Optimierungen äußerst ineffizient. Wenn der Wunsch besteht, diese Metriken mehr oder weniger angemessen zu berechnen, können Sie die Optimierung deaktivieren
    -tune [psnr|ssim]
    Die endgültige Datei unterscheidet sich jedoch natürlich von dem, was ohne diese Flags gemacht wurde.

    Vorschau


    Das Hauptproblem beim Erzeugen von Vorschaubildern ist eine unscharfe Quelle. Die Definition und Suche nach klaren Bildern ist eine sehr untriviale und ressourcenintensive Aufgabe. Glücklicherweise ist die Lösung dieses Problems in den meisten Codecs im Videocodierungsprozess enthalten. Sie können den Keyframe, der einer bestimmten Position am nächsten liegt, von allen Frames, die ihn umgeben, am klarsten machen. In ffmpeg können Sie es so machen:

    -ss [позиция] -vf \"select='eq(pict_type,PICT_TYPE_I)'\" -vsync vfr

    Standard-Encoder werden nicht optimal komprimiert. Daher ist es besser, nach Erhalt des Bildes das Optipng-Verfahren zu verwenden - eine durchschnittliche Einsparung von 500 KB in der FHD-Vorschau.

    Hochauflösende Bilder lassen sich am besten verschachteln. Daher werden wir die Größe geringfügig erhöhen (um 5-10%), die Anzeigedauer auf der Ladeseite jedoch erheblich reduzieren.

    Der Artikel hat sich bereits als dicht herausgestellt, und ich bezweifle, dass alle Informationen in einem einzigen großen Text zusammengefasst werden sollten. Wenn die Fortsetzung zu diesem Thema interessant ist, schreiben Sie in die Kommentare oder markieren Sie die Umfrage.

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

    * Ich habe keinen Bezug zu den Autoren der relevanten Websites und kann ihre Ansichten und Meinungen nicht teilen. Entscheidungen darüber, wer und wie man auf den Code zugreifen kann, kann ich nicht kommentieren.

    Bereit, Fragen zu beantworten.

    Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte melden Sie sich an.

    Betreff für möglichen nächsten Artikel


    Jetzt auch beliebt: