So unterstützen Sie H265/HEVC im Browser

  • I. Einleitung
  • 2. Mainstream-Browser-Unterstützung für HEVC
  • 3. Zwei Methoden zum Hinzufügen von HEVC-Unterstützung
  • 4. Die Hauptarbeit besteht darin, den Browser anzupassen und zu ändern, um HEVC hinzuzufügen
  • 5. Einführung in den Chromium-Browser, der HEVC unterstützt


I. Einleitung

Die Browserunterstützung für H.265 (HEVC) war für viele Benutzer schon immer ein Problem, insbesondere im Bereich der Videoüberwachung. Immer mehr neue Geräte von Überwachungsherstellern verwenden standardmäßig die H265-Videokodierung. Wenn wir diese Art von Videoanwendung bereitstellen möchten, wird die clientseitige Dekodierung zu einem großen Problem. Insbesondere mit der Popularisierung der Webtechnologie sind immer mehr Unternehmensanwendungen bereit, Anwendungen auf der Webplattform bereitzustellen, und der Client verwendet den Browser zum Abspielen von Videostreams oder Videodateien.


2. Mainstream-Browser-Unterstützung für HEVC


Die obige Abbildung zeigt die Unterstützung von HEVC auf der Browserseite, wobei Rot bedeutet, dass es nicht unterstützt wird, Grün bedeutet, dass es unterstützt wird und Gelb bedeutet, dass es durch harte Dekodierung oder auf bestimmten Geräten unterstützt werden kann. Es ist ersichtlich, dass HEVC browserseitig keine weithin unterstützte Lösung ist.

3. Zwei Methoden zum Hinzufügen von HEVC-Unterstützung

Derzeit versuchen viele Hersteller, die technische Lösung von webassembly+ffmpeg+webworker+canvas zu nutzen, um eine weiche Dekodierung der Webversion zu erreichen. Der Vorteil ist eine bessere plattformübergreifende und Browserkompatibilität, der Nachteil ist jedoch eine geringe Leistung. Im Allgemeinen kann auf einem PC nur ein Kanal für die 1080p-Echtzeitdekodierung erreicht werden. Bei lokalisierten CPUs oder ARM-Geräten kann keine reibungslose Wiedergabe erreicht werden. . Eine weitere gründlichere Methode besteht darin, den Browser anzupassen und zu modifizieren. Das schwierige Problem besteht jedoch darin, Netzwerkströme und -dateien zu unterstützen. Wie bei H.264 muss Hardware verwendet werden, um die HEVC-Dekodierung so weit wie möglich zu implementieren.
Im Internet gibt es viele Einführungen in die erstere Methode. Im Folgenden wird hauptsächlich die zweite Methode vorgestellt.

4. Die Hauptarbeit besteht darin, den Browser anzupassen und zu ändern, um HEVC hinzuzufügen

Die Unterstützung von Chrom für die HEVC-Dekodierung ist hauptsächlich in zwei Teile unterteilt:

  1. Dateidekodierung (einschließlich MSE): Chromium verfügt grundsätzlich über eine vollständige Implementierung (die harte Dekodierung von HEVC ist hier nicht enthalten, was später separat beschrieben wird), aber weder Chrome noch Chromium-Versionen kompilieren diese Implementierungen, sodass Chromium durch die Konfiguration einiger zusätzlicher Kompilierungsoptionen ermöglicht wird um die Dekodierung von HEVC-Dateien zu unterstützen.
  2. Echtzeit-Stream-Dekodierung (webrtc-Teil): Chromium hat diesen Teil nicht implementiert. Obwohl ffmpeg die Hevc-Dekodierung unterstützen kann, reicht es für webrtc nicht aus, die Hevc-Dekodierung zu unterstützen. Dies erfordert auch zusätzliche Entwicklung, um HEVC-Informationen zu SDP hinzuzufügen, den RTP_HEVC-Stream zu formatieren und den HEVC-Code-Stream zu analysieren (z. B. Breite und Höhe, Frame-Typ-Analyse usw.) und schließlich einen HEVC-Decoder basierend auf Payload_Type usw. zu erstellen.

Der größere Arbeitsaufwand und die Schwierigkeit besteht darin, Chromium dazu zu bringen, HEVC-Hard-Dekodierung zu unterstützen. Sowohl Dateien als auch Echtzeit-Streams erfordern derzeit zusätzliche Entwicklung:

  1. Auf der Windows-Plattform: Zur Unterstützung der HEVC-Hard-Dekodierung kommen zwei Optionen in Betracht: Eine davon ist die MFT-Lösung, die den mit dem Windows-System gelieferten Decoder nutzt und relativ einfach zu entwickeln ist. Die zweite basiert auf der DXVA-Schnittstellenlösung. Diese Lösung ist schwierig zu implementieren und erfordert ein tiefes Verständnis des Decodierungsprozesses. Sie erfordert das Parsen des Code-Streams, die Verwaltung interner Puffer usw. Im Gegensatz zur ersten Lösung, die Frame-Daten direkt senden kann .
  2. Chromium unterstützt HEVC-Hard-Dekodierung unter Linux. Dieser Aspekt ist komplizierter und betrifft hauptsächlich drei Grafikkartenhersteller: Intel, AMD und Nvidia. Intel unterstützt die VAAPI-Lösung vollständig, NVIDIA unterstützt die CUVID- und VDPAU-Lösungen vollständig und unterstützt teilweise Vaapi. AMD unterstützt sowohl VAAPI als auch VDPAU, jedoch nicht vollständig. Alle Lösungen ähneln der Windows DXVA-Lösung und erfordern ein tieferes Verständnis des Decodierungsprozesses, des Parsens des Codestreams, der Pufferverwaltung usw.
  3. Die Unterstützung von Chromium für die HEVC-Hard-Dekodierungslösung auf Android ist relativ klar: Sie können den systemeigenen Codec Mediacodec verwenden und entsprechende Änderungen und Anpassungen vornehmen.

5. Einführung in den Chromium-Browser, der HEVC unterstützt

Basierend auf jahrelanger Erfahrung in der Entwicklung von Browseranpassungen hat das Browser-Craftsman-Team erfolgreich einen Chromium-Browser veröffentlicht, der HEVC-Dekodierung unterstützt. Die Funktionen sind wie folgt:

  • Wie bei H264 wird zuerst die harte Dekodierung von HEVC verwendet, und wenn keine harte Dekodierung vorhanden ist, wird automatisch die weiche Dekodierung von ffmpeg verwendet. Sie können auch über den Schalter zwischen harter Dekodierung und weicher Dekodierung wechseln.
  • Unterstützt die Wiedergabe von HEVC-Dateien über das Video-Tag und die Dekodierung von bis zu 8K-Videos.
  • Der Schalter kann die Nutzung der Hard-Decoding-Funktionen der integrierten Grafikkarte erzwingen;
  • Netzwerk-HEVC-Videostream-Wiedergabe: Folgt der standardmäßigen HTML5-WebRTC-Technologie, ähnlich wie H264, um die HEVC-Videostream-Wiedergabe zu implementieren.
  • Unterstützt Windows, Linux auf mehreren Plattformen (einschließlich heimischer Ökologie) und Android;
  • Unter Windows wird HEVC-Hard-Dekodierung durch DXVA unterstützt und 25 bis 36 Kanäle mit 1080p-Video können gleichzeitig auf Intel-Prozessoren abgespielt werden; unter Linux wird HEVC-Hard-Dekodierung durch VAAPI unterstützt, das über keine integrierte GPU-Dekodierung für Loongson Feiteng verfügt Zhaoxin und andere. Der Browser kann automatisch die GPU der externen Grafikkarte zur Hardware-Dekodierung aufrufen; (Da der Quellcode HEVC nicht unterstützt, ist dieser Teil der Arbeitslast relativ groß.); Unter dem Android-System erfolgt die HEVC-Harddekodierung implementiert durch Mediacodec.
  • Unterstützt die neueste Chrom-Kernel-Version (derzeit v90).

Guess you like

Origin blog.csdn.net/xiehuanbin/article/details/133310744