Abhängigkeiten von GStreamer-Elementen: Wie verbinde ich playbin mit hlssink?

1

Ich bin neu in GStreamer und habe versucht, mit gst-launch-1.0 einige einfache Pipelines zu erstellen. Ich habe Schwierigkeiten herauszufinden, welche Elemente zusammenpassen müssen. Zum Beispiel möchte ich ein Webm-Video in ein HTML5-Video-Tag in einem Browser streamen. Um die Datei zu öffnen und zu lesen, muss ich meines Erachtens playbin verwenden:

gst-launch-1.0 playbin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm ...

Dann, um die Datei verfügbar zu machen, benutze ich hlssink:

! hlssink max-files=5  playlist-root=http://10.12.9.3/ location=/var/www/html/hlssink.webm

Dann verwende ich in meinem Browser das Video-Tag:

<video src="http://10.12.9.3/hlssink.webm" controls>

Diese Pipeline startet also nicht und ich erhalte die folgende Fehlermeldung:

WARNING: erroneous pipeline: could not link playbin0 to hlssink0

Daraus ergibt sich, dass ich diese beiden Elemente nicht verknüpfen kann. Gut, aber wo finde ich die anderen Elemente, die ich in meine Pipeline aufnehmen muss, damit dies funktioniert?

Danke im Voraus.

Przemek Lach
quelle

Antworten:

0

Ich denke, Sie sollten die gstreamer-Dokumentation kurz durchlesen, um zu verstehen, wie es funktioniert. GStreamer ist ein Framework zum Erstellen eines Diagramms für die Datenverarbeitung. Sie finden das Handbuch hier: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html

Playbin ist ein spezielles Element (ein Bin) und stellt eine interne Pipeline für Sie zusammen. Playbin stellt keine Verknüpfungsfelder zur Verfügung, da eine vollständige Wiedergabepipeline erstellt werden soll. Aus diesem Grund können Sie es nicht mit hlssink verknüpfen.

Sie können andere Elemente zum Erstellen einer Pipeline verwenden, um Ihre Webm-Eingaben in hlssink zu transkodieren. Sie können beispielsweise uridecodebin verwenden, einen weiteren Bin, der automatisch eine Dekodierungspipeline für alle von Ihnen verwendeten Medien erstellt (vorausgesetzt, Sie haben die richtigen Plugins dafür ). So etwas wie:

gst-launch-1.0 uridecodebin uri=<youruri> name=decbin ! queue ! videoconvert ! x264enc ! tsmux name=muxer ! hlssink decbin. ! queue ! audioconvert ! faac ! muxer.

Ich habe es noch nicht getestet, aber so etwas sollte funktionieren, um Ihre Eingaben beispielsweise mit H264 und AAC in mpegts umzuwandeln und die Daten an hlssink weiterzuleiten.

Um zu überprüfen, welche Elemente auf Ihrem System vorhanden sind, verwenden Sie das Tool gst-inspect-1.0. Es werden alle Elemente aufgelistet, wenn Sie kein Argument angeben, oder es werden Details zu einem bestimmten Element angegeben, wenn Sie ein Argument angeben, wie z.

gst-inspect-1.0 hlsssink

BEARBEITEN: Korrigieren der in Kommentaren vorgeschlagenen Pipeline

gst-launch-1.0 uridecodebin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm name=decbin ! queue ! videoconvert ! x264enc ! mpegtsmux name=muxer ! hlssink max-files=5 playlist-root=10.12.9.3 location=/var/www/html/hlssink decbin. ! queue ! audioconvert ! avenc_aac ! muxer.
Thiagoss
quelle
Ich habe die Dokumentation bereits gelesen, aber es fällt mir immer noch schwer, die Reihenfolge der Elemente herauszufinden. Vielleicht liegt es daran, dass ich keinen Hintergrund in der Video- / Audiobearbeitung habe, sodass ich den Prozess nicht wirklich verstehe. Wenn ich nur eine .webm-Datei streamen möchte, warum muss ich dann Dinge wie Videokonvertierung, x264enc usw. tun? Ich kann die .webm-Datei über Apache direkt an meinen Browser senden. Warum muss ich diese zusätzlichen gstreamer-Elemente verwenden, um mich einfach zu bewegen? die Datei über eine einfache Pipeline?
Przemek Lach
Ich habe versucht, Ihre Pipeline zu verwenden, und ich musste einige Dinge ändern: gst-launch-1.0 uridecodebin uri = file: ///home/ubuntu/g-streamer-lively/skyrim.webm name = decbin! Warteschlange ! videokonvertieren! x264enc! mpegtsmux name = muxer! hlssink decbin. ! Warteschlange ! audioconvert! avenc_aac! Muxer. ! hlssink max-files = 5 playlist -root = 10.12.9.3 location = / var / www / html / hlssink.webm. Wenn ich jetzt versuche zu starten, erhalte ich folgende Fehlermeldung: WARNUNG: Fehlerhafte Pipeline: Verknüpfung ohne Quellelement.
Przemek Lach
Wenn Sie eine Datei nicht durch die Pipeline "verschieben", wird sie an jedem Knoten verarbeitet. Wenn Sie uridecodebin verwenden, wird Ihre Eingabedatei demuxiert und dekodiert, vorausgesetzt, Sie haben sowohl Video als auch Audio, und Sie erhalten 2 Ausgaben davon. Jeder wird mit einem neuen Format neu codiert, um in MPEGTS umgewandelt zu werden, die normalerweise über das von Ihnen gewünschte HLS-Protokoll bereitgestellt werden.
Thiagoss
Ihre Pipeline ist falsch, es wurden zwei hlssink-Instanzen erstellt, und ich bin mir nicht sicher, ob Sie verstehen, was HLS ist und wie es mit den von Ihnen ausgewählten Parametern funktioniert. HLS erstellt eine Wiedergabeliste mit kleinen Dateien, die nacheinander heruntergeladen und wiedergegeben werden können.
Thiagoss
Hallo danke für die Bearbeitung. Ich habe Ihre neue Pipeline ausprobiert und erhalte den folgenden Fehler: FEHLER: vom Element / GstPipeline: pipeline0 / avenc_aac: avenc_aac0: Der Codec ist experimentell, aber die Einstellungen ermöglichen es Encodern nicht, eine Ausgabe von experimenteller Qualität zu erzeugen. Ich habe versucht herauszufinden, wo ich die "experimentelle Qualität" einstellen kann, konnte sie aber nicht finden. Vermisse ich eine Flagge oder so?
Przemek Lach