Multimedia-Framework

Andreas Mühlbauer,

Open Source für Embedded-Systeme

Das Open Source Multimedia Framework GStreamer ermöglicht es, Embedded-Systeme mit umfangreichen Video-Funktionen auszustatten. Unter anderem lassen sich damit mehrere Video-Quellen miteinander kombinieren und Text-Overlays einfügen.

Bild-in-Bild Funktion von GStreamer. © Creative Commons Attribution 3.0‚ Peach Open Movie Project

Moderne Vision-Applikationen beinhalten eine Vielzahl unterschiedlicher Elemente. Jeder einzelne Funktionsblock muss gut ausgewählt, konfiguriert und validiert werden, bevor er dann mit anderen Komponenten in möglichst langlebigen Applikationen verbunden wird. Neben einer möglichst niedrigen Hürde für den Einstieg in eine neue Technologie sollen auch die Langlebigkeit der Architektur sowie eine möglichst große Anzahl günstiger oder kostenloser Features das Paket abrunden.

Das GStreamer-Projekt erfüllt viele dieser Anforderungen und erfreut sich, auch im Umfeld ressourcen-optimierter Embedded-Systeme, steigender Beliebtheit. GStreamer ist ein Pipeline-basiertes Multimedia-Framework und hat seine Wurzeln, wie eine Vielzahl anderer Open-Source-Projekte, im wissenschaftlichen Bereich. Ende 1999 wurde das Projekt der Öffentlichkeit vorgestellt und wird seitdem von einer wachsenden Entwicklergemeinde betreut und aktiv weiterentwickelt.

Anwendungsbeispiele

Anwendung findet GStreamer in vielen Embedded-Systemen, die aktuellen Ansprüchen an Funktion, Qualität und Leistungsfähigkeit genügen müssen. Anspruchsvolle Umsetzungen in modernen Analyse- oder Überwachungsanwendungen benötigen oft eine Bild-in-Bild-Anwendung. Das Framework bietet „out of the box“ alle Elemente, um statische Bilder oder Videostreams einzulesen und diese als Bild-in-Bild-Anwendung darzustellen.

Anzeige

Viele Messgeräte erfordern die Darstellung von Messwerten, kombiniert mit fortlaufend aktualisierten Statusinformationen. Das GStreamer Framework bietet vielfältige Möglichkeiten, Grafik und Text-Overlays in Multimedia-Inhalte einzufügen, diese miteinander zu kombinieren oder als Menü-Elemente darzustellen. Auf diese Weise lassen sich ansprechende und informative Benutzeroberflächen gestalten.

Als Open-Source-Projekt wird auch GStreamer durch die Community betreut und weiterentwickelt. Der Anwender kann an den Entwicklungsergebnissen partizipieren, oder die Umsetzung der Funktionalität durch eigene Beiträge an die Community mitgestalten. Entwickler, die das Framework verwenden wollen und externe Unterstützung benötigen, können, neben der Unterstützung durch die Community, auf spezialisierte Dienstleister zurückgreifen, um das Tool projektspezifisch anzupassen oder Erweiterungen zu implementieren. GStreamer ist unter der LGPL-Lizenz verfügbar und ist entsprechend der Vorgaben dieser Open-Source-Lizenz einsetzbar.

Verwendung von Pipelines für größtmögliche Flexibilität

Prototyp einer Pipeline. © Aries Embedded

GStreamer basiert auf dem Pipeline-Modell und bietet die Möglichkeit, eine oder mehrere Multimediaquellen miteinander zu kombinieren, mittels geeigneter Filter zu modifizieren, filtern, codieren oder decodieren und, nach erfolgter Bearbeitung einer oder mehreren Datensenken zuzuführen. Die Pipeline kann verzweigt werden und bietet damit vielfältige Möglichkeiten, Content weiter zu verarbeiten.

Jedes Filterelement stellt zugleich eine Datensenke für den Empfang der Daten sowie eine Datenquelle für die Bereitstellung der Daten für das folgende Filterelement oder auch die Datensenke dar.

Diese Darstellung der Pipeline ist stark vereinfacht und soll das grundsätzliche Prinzip von GStreamer verdeutlichen. Als Datenquelle können beispielsweise Multimedia-Dateien, ein Bild das direkt von der Kamera in die Pipeline geliefert wird oder auch ein Datenstream, der über Netzwerk empfangen wird verwendet werden. Filterblöcke dienen dazu, die Inhalte zu filtern, Datenströme aufzuteilen oder zusammenzufügen, Daten zu kodieren oder dekodieren, andere Informationen auf bestehende Inhalte zu überlagern, oder anderweitig zu modifizieren.

Wird Embedded Linux als Betriebssystem für die Embedded-Applikation genutzt, lässt sich GStreamer sehr einfach zum Erstellen von Prototypen neuer oder geänderter Funktionen nutzen. Dabei wird in einem Terminal die Kommandozeile verwendet, um GStreamer zu starten und die einzelnen Elemente aneinanderzureihen und zu verwenden. In GStreamer heißen die Elemente der Pipeline „Elemente“. Ein Plug-in umfasst meistens mehrere Elemente. Es gibt zum Beispiel ein Plug-in für „vaapi“ oder „rtp“. Eine typische Eingabe in die Kommandozeile könnte beispielsweise wie folgt aussehen:

gst-launch-1.0

videotestsrc \

   ! video/x-raw-yuv, framerate=30/1, width=800, height=480 \

     ! vaapih264enc \

       ! mp4mux \

         ! filesink location=testfile.mp4

Dieses Kommando erzeugt ein Testbild mit Hilfe des Testbildgenerators, formatiert das Bild auf 800x480 Pixel und eine Framerate von 30 FPS, kodiert diesen Videoinhalt in das H.264-Format, erzeugt aus dem komprimierten Inhalt das MP4-Format und speichert das Ergebnis in einer Datei ab. In Funktionsblöcken einer GStreamer-Pipeline würde sich die dargestellte Funktion wie in Bild 4 darstellen.

GStreamer Text- und Bild-Overlay. © Aries Embedded

Mit dem videotestsrc-Element besteht die Möglichkeit, Testvideos in vielen unterschiedlichen Formaten für eine Pipeline bereitzustellen. Werden diese dann mit den in Linux-Distributionen verfügbaren Mediaplayern kombiniert, lassen sich erste Prototypen einer späteren Videostrecke oder einer anderen Applikation ausschließlich mit Standard-Bordmitteln von Linux realisieren, ohne dass zuvor ein Kamerasensor konfiguriert oder ein Display eingeschaltet wurde.

In der Praxis werden mit Plug-ins als Shared Libraries eine Vielzahl von Video- und Audiofunktionen bereitgestellt. Plug-Ins helfen, Datenquellen und -senken zu realisieren, Overlays als Text oder Bild hinzuzufügen, Codierung und Decodierung vieler gängiger Audio- und Videoformate, Streams und Bilder anzuzeigen und vieles mehr.

Codecs und Hardwarebeschleunigung

Viele Formate für Dateien, Streams und Codecs werden nativ durch die Hardwarebeschleunigung in CPU-Derivaten, Grafik- oder Audiokarten unterstützt. Diese Architekturen bieten in CPU oder Chipsatz Funktionen für Codierung und Decodierung populärer Formate wie beispielsweise H.264, H.265 oder MJEPG. Dies ist insbesondere für die ressourcenschonende Implementierung von Embedded-Systemen interessant, da die Verwendung dieser Beschleunigerblöcke die Hardware gar nicht oder nur sehr gering belasten. Dies hilft in der Praxis, schlankere Systeme zu realisieren, Zeit, Geld und Ressourcen für das Produkt zu sparen und auch das Entwicklungsrisiko zu verringern. Die Verwendung der Kommandozeile kann die bevorzugte Lösung sein, um auf die Schnelle die Machbarkeit einer gewünschten Funktionalität zu prüfen. Für finale Produkte und Releases wird GStreamer in C#, C++, Python, Perl und anderen Umgebungen verwendet. Das GStreamer-Framework selbst ist als Source-Code verfügbar und lässt sich als vorkompiliertes Binary auch unter Android, iOS und Windows verwenden.

Aries Embedded unterstützt seine Kunden bereits in vielen Projekten rund um das Thema Smart Vision. Dies beginnt oft mit der Beratung der Kunden zur einzusetzenden CPU- oder FPGA-Architektur, geht über die Entwicklung von Hardware, Software und IP bis hin zur Qualifikation und Lieferung kompletter Systeme in Serie.

Andreas Widder, Geschäftsführer von Aries Embedded

Anzeige

Das könnte Sie auch interessieren

Anzeige

Item-Online-Konfigurator

Lineartechnik verstehen

Ein Tool zur Auslegung von Lineartechnik, inklusive der passenden Antriebe und Steuerungen, bietet zusätzlichen Mehrwert, indem es auch die Grundlagen der Technik vermittelt und sich damit als Schulungsinstrument eignet.

mehr...
Anzeige
Anzeige
Anzeige

Subscription-Modelle

Industriemaschinen im Abo

Subscription-Modelle setzen sich durch. Auch viele produzierende Unternehmen, allen voran die Automobilbranche, erweitern ihr Portfolio durch digitale Services und entwickeln damit neue Geschäftsmodelle – häufig mit flexiblen, kundenzentrierten...

mehr...
Anzeige
Anzeige
Anzeige