2017-01-26 4 views
0

ビデオストリームをstdinから複数のUDPクライアントにリダイレクトするCプログラムにパイプラインを書きました。これらのクライアントを動的に追加または削除したいので、コンパイル時にそれらのクライアントとその数を定義することはできません。これは私のパイプライン(Iは固定clientsパラメータを追加する場合、それは正常に動作します)です:GStreamer - 要素に信号を送る

fdsrc name=origin \ 
! video/x-h264,width=320,height=240,framerate=30/1,profile=baseline,stream-format=avc,alignment=au \ 
! h264parse \ 
! rtph264pay \ 
    config-interval=1 \ 
    pt=96 \ 
! multiudpsink name=dest \ 
    sync=false 

GStreamerのドキュメントによると、私は動的にクライアントを追加または削除するために、信号を送信することによって、それを達成することができます。この場合、add signalである必要があります。

しかし、は、要素(この場合はmultiudpsink要素)に信号を送信していません。私の要素への参照を取得するのは簡単です:

GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "dest"); 
/* TODO: send a signal to add a client */ 
g_object_unref(sink); 

しかし、今私はどのようにその要素に信号を放射することができますか?

答えて

1

最後に私はそれを得ました。 g_signal_emit_by_nameを使用すると、任意のGStreamer要素にメッセージを送信できます。

GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "dest"); 
g_signal_emit_by_name(sink, "add", "192.168.1.25", 5004, NULL); 
g_object_unref(sink); 

進め方に私にright exampleを与えたのGStreamer-develのメーリングリストからのティム・ミュラー、のおかげで:

コードは次のようになります。

関連する問題