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