Ich versuche udp-Streaming auf localhost zu testen, aber es ist nicht alles zeigt:Gstreamer: Warum kann ich keine Daten über UDP auf localhost senden?
videotestsrc (oder audiotestsrc) -> udpsink (Port: 5078, Host: 127.0.0.1)
Hier ist die Code:
console_out_inf("TESTING", "Starting work with test elements");
gint port = 5078;
// TEST PIPELINE OUT
gst_bin_add_many(GST_BIN(GSD->pipetest_out), GSD->testsrc, GSD->udpsink, NULL);
gchar* host = "127.0.0.1";
g_object_set(GSD->udpsink, "port", port, NULL);
g_object_set(GSD->udpsink, "host", host, NULL);
if (!gst_element_link(GSD->testsrc, GSD->udpsink))
console_out_bad("STREAMING", "Error linking test udp elements -- SEND");
else
console_out_yes("STREAMING", "Correctly linked test udp elements -- SEND");
// TEST PIPELINE IN
gst_bin_add_many(GST_BIN(GSD->pipetest_in), GSD->udpsrc, GSD->autovideosink, NULL);
gst_element_set_state(GSD->udpsrc, GST_STATE_NULL);
g_object_set(GSD->udpsrc, "port", port, NULL);
if (!gst_element_link(GSD->udpsrc, GSD->autovideosink))
console_out_bad("STREAMING", "Error linking test udp elements -- RECEIVE");
else
console_out_yes("STREAMING", "Correctly linked test udp elements -- RECEIVE");
// PLAY TEST PIPELINE OUT
GstStateChangeReturn ret1;
ret1 = gst_element_set_state(GSD->pipetest_out, GST_STATE_PLAYING);
if (ret1 == GST_STATE_CHANGE_FAILURE)
console_out_bad("TESTING", "Failed playing pipetest out");
else
console_out_yes("TESTING", "Correctly played pipetest out");
// PLAY TEST PIPELINE IN
GstStateChangeReturn ret2;
ret2 = gst_element_set_state(GSD->pipetest_in, GST_STATE_PLAYING);
if (ret2 == GST_STATE_CHANGE_FAILURE)
console_out_bad("TESTING", "Failed playing pipetest in");
else
console_out_yes("TESTING", "Correctly played pipetest in");
// PRINT PIPELINES
GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(GSD->pipetest_out), GST_DEBUG_GRAPH_SHOW_ALL, "pipetest_out");
GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(GSD->pipetest_in), GST_DEBUG_GRAPH_SHOW_ALL, "pipetest_in");
Das ist "meine eigene Konsolenausgabe":
EDIT: nicht mehr relevant! Alles ist in Ordnung instanziiert wurde die Pipeline richtig gebaut, aber mit
PIPELINE OUT: videotestsrc -> udpsink (Host: 127.0.0.1, Port: 5078)
PIPELINE IN: udpsrc (port : 5078) -> autovideosink
Der Autovideosink zeigt nichts an! Durch Überprüfen von Netstat -a wird keine Verbindung an diesem Port angezeigt.
Weitere INFO:
- Die Grafik erzeugt mit "gstreamer-Debugging" enthält natürlich nur die Video/Audio-testsrc Element udpsink verbunden.
- Das erste Mal, dass ich diesen Code ausführte, erschien das "Windows Firewall Window", also denke ich, dass etwas gesendet/empfangen wird.
- Dies ist in einem Visual Studio 2013/QT5 Add-In-Projekt, aber das sollte kein Problem sein
Wer weiß, was mache ich falsch?
Was meinen Sie es nicht auf die Beziehung steht Ausgabe, die ich gepostet habe? die erste Zeile soll nur zeigen, dass die Elemente korrekt initialisiert sind (durch gst_element_factory_make (...) –
Ich meine nur, ohne den ganzen relevanten Code zu sehen, ist es schwierig, seine Korrektheit festzustellen. Sie haben die Elemente nach der Erstellung unwissentlich zerstört –
Du hattest recht Ich habe udpsink in einer anderen Pipeline benutzt, deshalb konnte ich das pipetest_out nicht mit diesem Element darin erstellen, aber nun bleibt die zweite Hälfte meiner Frage: Ich sende UDP-Pakete auf localhost und es wird angenommen um das von pipetest_out eingehende Video anzuzeigen, tut es das aber nicht Bitte beachten Sie, dass ich die Frage und die Beschreibung bearbeitet habe Thx @thesombrerokid –