Hi all, it will be very nice to implement the ROHC (RObust Header Compression, RFC 3095) in a standalone plugin. IP, UDP and UDP header will be compressed from 40 octets to 3-5 ! A nice optimization for audio and video streaming.
You can find more informations about the ROHC and its open-source librairy: https://launchpad.net/rohc/ The API documentation for compressor and decompressor are available here:
Any developper interrested ? ---- Le sage ne dit pas ce qu'il sait, le sot ne sait pas ce qu'il dit. ---- ------------------------------------------------------------------------------ Throughout its 18-year history, RSA Conference consistently attracts the world's best and brightest in the field, creating opportunities for Conference attendees to learn about information security's most important issues through interactions with peers, luminaries and emerging and established companies. http://p.sf.net/sfu/rsaconf-dev2dev _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Hi,
I am interested in helping develop and test a rohc gstreamer plugin. I am new in both the gstreamer and rohc communities and I 'd appreciate any comments for the following approach. I think this would involve implementing 2 new gstelements: - rohccomp: accepts a packet stream and performs the packet compression. The input stream would be either in pcap format or accepted from a virtual interface (tun). Perhaps there are other input possibilities that I am not aware of. - rohcdecomp: accepts a compressed packet, decompresses and passes it on. Some gstreamer properties of both elements would include the rohc profile chosen and the input format chosen (pcap or reading from a tun interface) These 2 gstreamer elements would allow for similar functionality as the applications test/test.c and apps/tunnel/tunnel.c (from the rohc source code tree) to be implemented in a gst-launch command line pipeline. The pcap input file handling could be similar in principle to the pcapparse plugin in gst-plugins-bad. E.g to implement compression/decompression.of pcap packets and pass this rohc flow through udp we could use these pipelines: sender / compressor: gst-launch filesrc location="packets.pcap" ! rohccomp ! udpsink receiver / decompressor: gst-launch udpsrc ! rohcdecomp ! filesink location = "packets_otherside.txt" Rohc_decomp would output raw packets for now, though pcap-output should be possible in theory. Reading from a tun/tap interface (e.g. file /dev/net/tun) happens with a regular unix socket. Is there a gstreamer element that already implements opening and reading from an arbitrary file? If not, could this be implemented inside the rohc elements as a mode of input, or maybe as a separate element? I am basically asking if elements similar to socketsrc, socketsink in the following example exist or if it makes sense to have them: sender / compressor (assuming someone is sending packets to tun0) gst-launch socketsrc location="/dev/net/tun0" ! rohccomp ! udpsink receiver / decompressor (assuming someone is reading packets from tun1) gst-launch udpsrc ! rohcdecomp ! socketsink location = "/dev/net/tun1" Are there currently other ways in which the rohc library can be used? The above discussion only deals with UDP packets for now - if there would be added complexity / issues when using rtp please share. Does the above description look sufficient? Please feel free to make other suggestions or comments. Also let me know if someone else is already working on this off-lists so that development efforts are not duplicated. thanks, - Vasilis On Mon, Jan 18, 2010 at 8:18 AM, Nicolas Hennion <[hidden email]> wrote: > Hi all, > it will be very nice to implement the ROHC (RObust Header Compression, RFC > 3095) in a standalone plugin. > IP, UDP and UDP header will be compressed from 40 octets to 3-5 ! A nice > optimization for audio and video streaming. > You can find more informations about the ROHC and its open-source > librairy: https://launchpad.net/rohc/ > The API documentation for compressor and decompressor are available here: > - http://www.tech.viveris.com/docs/rohc/group__rohc__comp.html > - http://www.tech.viveris.com/docs/rohc/group__rohc__decomp.html > Any developper interrested ? > > > ---- > Le sage ne dit pas ce qu'il sait, le sot ne sait pas ce qu'il dit. > ---- > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for > Conference > attendees to learn about information security's most important issues > through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
In reply to this post by Nicolas Hennion
Hi Vasilis, nice to find a person interrested by this challenge !
To be honest, i am not a ROHC specialist too... But what i understand from this protocol is that it will be able to compress the IP, UDP (or TCP) and RTP header. In your pipeline exemple, you write: sender / compressor: # gst-launch filesrc location="packets.pcap" ! rohccomp ! udpsink receiver / decompressor: # gst-launch udpsrc ! rohcdecomp ! filesink location = "packets_otherside.txt" In this exemple, the header compression is done before the UDP encapsulation, only the RTP hrader will be compressed and not the UDP. I think that the best way to implement the ROHC is to fork the udpsink and udpsrc by addind a new tag (rohc="false|true"). sender / compressor: # gst-launch filesrc location="packets.pcap" ! udpsink rohc="true" receiver / decompressor: # gst-launch udpsrc rohc="false" ! filesink location = "packets_otherside.txt" Any comments ? Nicolas ---- Ce n'est pas l'appareil qui prend la photo. Ce sont les yeux, le coeur, le ventre, tout ça... -+- Jacques-Henri Lartigue -+- ---- ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Hi Nicolas,
On Thu, Jan 28, 2010 at 7:31 AM, Nicolas Hennion <[hidden email]> wrote: > Hi Vasilis, nice to find a person interrested by this challenge ! > > To be honest, i am not a ROHC specialist too... But what i understand from > this protocol is that it will be able to compress the IP, UDP (or TCP) and > RTP header. In your pipeline exemple, you write: > > sender / compressor: > # gst-launch filesrc location="packets.pcap" ! rohccomp ! udpsink > receiver / decompressor: > # gst-launch udpsrc ! rohcdecomp ! filesink location = > "packets_otherside.txt" > > In this exemple, the header compression is done before the UDP > encapsulation, only the RTP hrader will be compressed and not the UDP. I right, my example only did compression for the encapsulated pcap frames, not for the UDP frames. Both the examples I 've seen in the source code deal with compressing headers of packets that are later encapsulated by another packet flow > think that the best way to implement the ROHC is to fork the udpsink and > udpsrc by addind a new tag (rohc="false|true"). > sender / compressor: > # gst-launch filesrc location="packets.pcap" ! udpsink rohc="true" > receiver / decompressor: > # gst-launch udpsrc rohc="false" ! filesink location = > "packets_otherside.txt" > > Any comments ? I assume you mean that in your example pipeline would compress the whole udp flow. Actually this is a question for the rohc library developers: Since the library is a userspace implementation, can we compress headers for the entire packet flow? I think there would be at least one packet flow being created in the normal kernel stack, and we need some kernel mechanism e.g. a module to handle the compression of headers for that network flow within the networking code. So my question is: can we compress the whole network flow from startpoint to endpoint? Without a kernel module, I think we 'd always leave some uncompressed frames on the table. Perhaps there is a way to directly access all header flow with libpcap and CONFIG_PACKET_MMAP=y ( a kernel option)? But I am not sure if this needs to be exposed in a gstreamer element. Currently udpsink and udpsrc just use regular sockets for the packet flow, no pcap capabilities are exposed are far as I know. Apart from that, I think It should be possible to implement the rohc compression / decompression with an element derived from udpsrc/udpsink, is that what you mean by forking? The rohc=true/false setting would be a property of the element. Actually I am not clear on why you used "rohc=true" in your compressor and "rohc=false" in the decompressor. DId you mean to say that the properties of the element are "rohc=compress" and "rohc=decompress"? In short, this pipeline makes sense in theory. But as I mentioned udpsrc/udpsink use normal sockets to receive/transmit datagrams and I don't know if we can have the full header information available for compression at this layer. I apologize if I am missing something obvious in the librohc implementation comments & suggestions are very welcome. thanks, - Vasilis > > Nicolas > > ---- > Ce n'est pas l'appareil qui prend la photo. > Ce sont les yeux, le coeur, le ventre, tout ça... > -+- Jacques-Henri Lartigue -+- > ---- > ------------------------------------------------------------------------------ > The Planet: dedicated and managed hosting, cloud storage, colocation > Stay online with enterprise data centers and the best network in the > business > Choose flexible plans and management services without long-term contracts > Personal 24x7 support from experience hosting pros just a phone call away. > http://p.sf.net/sfu/theplanet-com > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |