ZRTP plugin for GStreamer

Mathias Gyllengahm lunarshuttle at gmail.com
Wed Feb 15 07:05:50 PST 2012


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


More information about the gstreamer-devel mailing list