2016-08-08 55 views
0

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:

  1. Die Grafik erzeugt mit "gstreamer-Debugging" enthält natürlich nur die Video/Audio-testsrc Element udpsink verbunden.
  2. Das erste Mal, dass ich diesen Code ausführte, erschien das "Windows Firewall Window", also denke ich, dass etwas gesendet/empfangen wird.
  3. Dies ist in einem Visual Studio 2013/QT5 Add-In-Projekt, aber das sollte kein Problem sein

Wer weiß, was mache ich falsch?

Antwort

0

Dieser Code scheint gut zu sein, bezieht sich jedoch nicht auf die von Ihnen gepostete Konsolenausgabe.

Versuchen Sie, Ihre Pipeline Stück für Stück mit der Kommandozeile gst-Start Prüfung:

gst-launch-1.0 -e -v videotestsrc ! udpsink host="127.0.01" 

zu einem fakesink verbunden und dann in der udp Spüle tauschen, wenn Sie es Arbeit in der Kommandozeile Spiegel haben die Befehl im Code.

versuchen Sie es mit host = „localhost“ oder host = „192.168.0.1“ Ich erinnere mich nicht, aber ich denke udpsink Probleme mit der Loopback-Senden haben könnte

+0

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 (...) –

+0

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 –

+0

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 –