GStreamer Element Dependencies: Wie verbinde ich playbin mit hlssink?

7109
Przemek Lach

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

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

Um die Datei verfügbar zu machen, verwende 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 folgende Fehlermeldung:

WARNING: erroneous pipeline: could not link playbin0 to hlssink0 

Es sagt mir also, dass ich diese beiden Elemente nicht verknüpfen kann. Gut, aber wo finde ich heraus, welche anderen Elemente ich in meine Pipeline aufnehmen muss, damit dies funktioniert?

Danke im Voraus.

1

1 Antwort auf die Frage

0
thiagoss

Ich denke, Sie sollten die Dokumentation von gstreamer ein wenig lesen und lesen, 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 (eine Ablage) und es wird eine interne Pipeline für Sie zusammengestellt. Playbin macht keine Verbindungspads verfügbar, da es eine vollständige Wiedergabe-Pipeline erstellt. Aus diesem Grund können Sie es nicht mit hlssink verknüpfen.

Sie können andere Elemente verwenden, um eine Pipeline zu erstellen, um Ihre Webm-Eingabe in hlssink umzucodieren. Beispielsweise können Sie uridecodebin verwenden. Hierbei handelt es sich um eine andere Bin, in der automatisch eine Decodierungspipeline für alle von Ihnen verwendeten Medien erstellt wird (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 nicht getestet, aber so etwas sollte funktionieren, um beispielsweise mit H264 und AAC Ihre Eingabe in mpegts umzuwandeln und die Daten für hlssink zu übergeben.

Verwenden Sie das Tool gst-inspect-1.0, um zu überprüfen, welche Elemente sich auf Ihrem System befinden. Es werden alle Elemente aufgelistet, wenn Sie keine Argumente angeben oder Details zu einem bestimmten Element angeben, wenn Sie ein Element angeben, z.

gst-inspect-1.0 hlsssink 

BEARBEITEN: Korrektur der von Ihnen vorgeschlagenen Pipeline in Kommentaren

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. 
Ich habe die Dokumentation also schon einmal durchgelesen, 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, daher verstehe ich den Prozess nicht wirklich. Wenn ich nur eine .webm-Datei streamen möchte, warum muss ich Dinge wie Videokonvertierung, x264enc usw. ausführen? Ich kann die .webm-Datei direkt über Apache an meinen Browser liefern. Warum muss ich diese zusätzlichen gstreamer-Elemente verwenden, um mich einfach zu bewegen die Datei durch eine einfache Pipeline? Przemek Lach vor 9 Jahren 0
Ich habe versucht, Ihre Pipeline zu verwenden, und ich musste ein paar Dinge ändern: gst-launch-1.0 uridecodebin uri = file: ///home/ubuntu/g-streamer-lively/skyrim.webm name = decbin! Warteschlange ! Videokonvertierung! x264enc! mpegtsmux name = muxer! hlssink decbin. ! Warteschlange ! Audiokonvertierung! avenc_aac! Muxer. ! hlssink max-files = 5 playlist-root = http: //10.12.9.3/ location = / var / www / html / hlssink.webm. Jetzt, wenn ich versuche zu starten, erhalte ich eine Fehlermeldung: WARNUNG: fehlerhafte Pipeline: Verknüpfung ohne Quellelement. Przemek Lach vor 9 Jahren 0
Sie "verschieben" keine Datei durch die Pipeline, sie wird an jedem Knoten verarbeitet. Wenn Sie uridecodebin verwenden, wird Ihre Eingabedatei demuxiert und decodiert. Wenn Sie sowohl Video als auch Audio verwenden, erhalten Sie zwei Ausgänge. Jeder wird mit einem neuen Format neu codiert, um in mpegts gemuxt zu werden, was normalerweise über das HLS-Protokoll erfolgt, das Sie verwenden wollten. thiagoss vor 9 Jahren 0
Ihre Pipeline ist falsch, es wurden zwei hlssink-Instanzen erstellt, und ich bin nicht sicher, ob Sie wissen, was HLS ist und wie es anhand der von Ihnen ausgewählten Parameter funktioniert. HLS erstellt eine Wiedergabeliste mit kleinen Dateien, die heruntergeladen und nacheinander abgespielt werden sollen. thiagoss vor 9 Jahren 0
Hi danke für die Bearbeitung. Ich habe Ihre neue Pipeline ausprobiert und die folgende Fehlermeldung angezeigt: ERROR: from element / GstPipeline: pipeline0 / avenc_aac: avenc_aac0: Der Codec ist experimentell, aber die Einstellungen erlauben den Encodern nicht die Ausgabe von experimenteller Qualität. Ich habe versucht herauszufinden, wo ich "experimentelle Qualität" einstellen kann, aber ich konnte sie nicht finden. Fehlt mir eine Flagge oder so etwas? Przemek Lach vor 9 Jahren 0
Ok, ich habe es herausgefunden. Sie müssen nur nach avenc_acc die Konformität = -2 einstellen: ...! avenc_aac compliance = -2 ... Ich habe dies in keiner der Dokumentation gefunden, ich hatte Glück beim Lesen in einem Forum. Leider bekomme ich immer noch keine guten Ergebnisse. Diese Pipeline erstellt eine Datei, deren Größe ständig wächst, und meine Webseite mit der Przemek Lach vor 9 Jahren 0
Sie müssen die hlssink-Eigenschaften richtig einstellen, damit eine Live-HLS-Ausgabe ausgeführt werden kann. Überprüfen Sie die Eigenschaften von gst-inspect-1.0 hlssink und stellen Sie die Einstellungen entsprechend Ihrer gewünschten Konfiguration ein. Ihnen fehlt beispielsweise die Zieldauer für Segmente. thiagoss vor 9 Jahren 0