Hardwarebeschleunigte Videodekodierung für H.264 in Android vor Jelly Bean
-
21-12-2019 - |
Frage
Ich arbeite an einem Videokonferenzprojekt.Wir haben einen Software-Codec zum Kodieren und Dekodieren von Videobildern verwendet, der für niedrigere Auflösungen (bis zu 320p) gut geeignet ist.Wir haben geplant, unsere Anwendung für höhere Auflösungen auch bis 720p zu unterstützen.Ich habe erfahren, dass die Hardwarebeschleunigung diese Aufgabe recht gut erledigt.
Da der Hardware-Codec API Media Codec ab Jelly Bean verfügbar ist, habe ich ihn zum Kodieren und Dekodieren verwendet und es funktioniert einwandfrei.Aber meine Anwendung wird ab 2.3 unterstützt.Daher benötige ich eine hardwarebeschleunigte Videodekodierung für H.264-Frames mit 720p und 30 Bildern pro Sekunde.
Bei der Recherche bin ich auf die Idee gestoßen, den OMX-Codec zu verwenden, indem ich das Lampenfieber-Framework modifiziert habe. Ich hatte gelesen, dass der Hardware-Decoder für H.264 ab 2.1 und der Encoder ab 3.0 verfügbar ist.Ich habe viele Artikel und Fragen auf dieser Website durchgesehen und bestätigt, dass ich fortfahren kann.
Ich hatte über Lampenfieber-Architektur gelesen hier -Architektur Und Hier – Lampenfieber, wie es funktioniert
Und ich habe über den OMX-Codec gelesen Hier-verwende-Android-Hardware-Decoder-mit-OMXCodec-in-NDK.
Ich habe Startschwierigkeiten und einige Verwirrungen bei der Implementierung. Ich hätte gerne ein paar Informationen dazu.
- Um den OMX-Codec in meinem Code zu verwenden, sollte ich mein Projekt mit dem gesamten Android-Quellbaum erstellen oder kann ich dies tun, indem ich einige Dateien aus der AOSP-Quelle hinzufüge (wenn ja, welche alle).
- Welche Schritte sollte ich von Grund auf befolgen, um dies zu erreichen?
Kann mir jemand dazu eine Richtlinie geben?
Danke...
Lösung
Das beste Beispiel, um die Integration von zu beschreiben OMXCodec
In der nativen Ebene befindet sich das Befehlszeilendienstprogramm stagefright
wie man beobachten kann Hier In GingerBread
selbst.Dieses Beispiel zeigt, wie a OMXCodec
geschaffen.
Einige Punkte, die Sie beachten sollten:
Die Eingabe zu
OMXCodec
sollte als modelliert werdenMediaSource
Daher sollten Sie sicherstellen, dass Ihre Anwendung diese Anforderung erfüllt.Ein Beispiel für die Erstellung einesMediaSource
Die entsprechende Quelle finden Sie inrecord
Dienstprogrammdatei alsDummySource
.Der Eingang zum Decoder, d.h.
MediaSource
sollte die Daten über die bereitstellenread
Methode und daher sollte Ihre Anwendung für jeden einzelne Frames bereitstellenread
Anruf.Der Decoder könnte mit erstellt werden
NativeWindow
für die Ausgabepufferzuordnung.Wenn Sie in diesem Fall von der CPU aus auf den Puffer zugreifen möchten, sollten Sie sich wahrscheinlich an wenden diese Abfrage für mehr Details.