<p>Great news!<br>
Den 15 feb 2012 09:01 skrev &quot;Werner Dittmann&quot; &lt;<a href="mailto:Werner.Dittmann@t-online.de">Werner.Dittmann@t-online.de</a>&gt;:<br>
&gt;<br>
&gt; All,<br>
&gt;<br>
&gt; after some hacking I have a first working version of the proposed ZRTP/SRTP<br>
&gt; plugin for GStreamer.<br>
&gt;<br>
&gt; I&#39;m not familiar with GStreamer and its preferred ways to do things, thus I<br>
&gt; need some advise here :-) , for example how to implement asynchronous communication<br>
&gt; with the application to inform it about security status, etc.<br>
&gt;<br>
&gt; For asynchronuos communication: use signal or messages, or a combination of both?<br>
&gt; The data that zrtpfilter sends to the application is small, 2 integers usually<br>
&gt; or a string or two. No complex structures.<br>
&gt;<br>
&gt; I also like to ask for advise which technique to use to handover properties. Most<br>
&gt; properties are simple, just integers, booleans - that does not pose a problem. In<br>
&gt; one case, however, I would like to have a set of parameters at once, a combination<br>
&gt; of integers, boolean, string. This could be done step-by-step, but in this case<br>
&gt; a structure would be more covenient. Is this possible? Any pointers/links to an<br>
&gt; example if it is possible?<br>
&gt;<br>
&gt; I&#39;ll do some cleanup of the code and then create a git repository on github.<br>
&gt; This will happen later today and I keep you informed.<br>
&gt; NOTE: this is a very first pre-alpha version :-) not ready for real stuff, only<br>
&gt; for testing the principal implementation etc.<br>
&gt;<br>
&gt; The current layout of zrtpfilter:<br>
&gt;<br>
&gt;<br>
&gt;           +-------------------------------------+<br>
&gt;           |              zrtpfilter             |<br>
&gt;           +---------------+      +--------------+<br>
&gt;           |recv_rtp_sink  |      |recv_rtp_src  |<br>
&gt;  from     |               |      |              |  to RTP<br>
&gt;  network  +---------------+      +--------------+  plugin,<br>
&gt;  plugin,  |                                     |  e.g.<br>
&gt;  e.g.     +---------------+      +--------------+  rtpbin<br>
&gt;  udpsrc   |recv_rtcp_sink |      |recv_rtcp_src |<br>
&gt;           |               |      |              |<br>
&gt;           +---------------+      +--------------+<br>
&gt;           |                                     |<br>
&gt;           +---------------+      +--------------+<br>
&gt;           |send_rtp_sink  |      |send_rtp_src  |<br>
&gt;           |               |      |              |  to<br>
&gt;  from RTP +---------------+      +--------------+  network<br>
&gt;  plugin,  |                                     |  plugin,<br>
&gt;  e.g.     +---------------+      +--------------+  e.g.<br>
&gt;  rtpbin   |send_rtcp_sink |      |send_rtcp_src |  udpsink<br>
&gt;           |               |      |              |<br>
&gt;           +---------------+      +--------------+<br>
&gt;           |                                     |<br>
&gt;           +-------------------------------------+<br>
&gt;<br>
&gt; The plugin is a full-duplex plugin that handles up- and downstream traffic for<br>
&gt; RTP and RTCP. If connected with another ZRTP enabled client it automatically<br>
&gt; negotiates the SRTP keys and enables SRTP and SRTCP. This is fully transparent<br>
&gt; to the connected up- or downstream plugins. During my tests I use this setup:<br>
&gt;<br>
&gt; gst-launch --gst-plugin-path=$HOME/devhome/gstZrtp/build/src -m \<br>
&gt;    zrtpfilter name=zrtp \<br>
&gt;    udpsrc port=5004 ! zrtp.recv_rtp_sink zrtp.recv_rtp_src ! \<br>
&gt;        fakesink dump=true sync=false async=false \<br>
&gt;    udpsrc port=5005 ! zrtp.recv_rtcp_sink zrtp.recv_rtcp_src ! \<br>
&gt;        fakesink dump=true sync=false async=false \<br>
&gt;    zrtptester name=testsrc \<br>
&gt;    testsrc.src ! zrtp.send_rtp_sink zrtp.send_rtp_src ! \<br>
&gt;        udpsink clients=&quot;<a href="http://127.0.0.1:5002">127.0.0.1:5002</a>&quot; sync=false async=false \<br>
&gt;    testsrc.rtcp_src ! zrtp.send_rtcp_sink zrtp.send_rtcp_src ! \<br>
&gt;        udpsink clients=&quot;<a href="http://127.0.0.1:5003">127.0.0.1:5003</a>&quot; sync=false async=false<br>
&gt;<br>
&gt; The first two pipes listen on 5004/5005 and my external ZRTP reference client<br>
&gt; sends on these two ports its RTP/RTCP data. The next two pipes connect to<br>
&gt; a zrtptester plugin (a quick hacked plugin that produces well defined data) and<br>
&gt; sends it to my external ZRTP reference client which listens on ports<br>
&gt; 5002/5003. The ZRTP protocol handshake uses the two RTP ports (5002 and 5004).<br>
&gt;<br>
&gt; All tests so far work, the ZRTP handshake works, the SRTP/SRTCP setup works<br>
&gt; and the data is encrypted and decrypted appropriately.<br>
&gt;<br>
&gt; The design would also support a SRTP/SRTCP standalone filter. In that case the<br>
&gt; application needs to set the SRTP keys, for example if it implements some sort<br>
&gt; of password/external key negotiation. That would be just a matter how to setup<br>
&gt; and control the zrtpfilter (plugin properties mainly).<br>
&gt;<br>
&gt; Regards,<br>
&gt; Werner<br>
&gt; _______________________________________________<br>
&gt; gstreamer-devel mailing list<br>
&gt; <a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br>
&gt; <a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</p>