rohc team mailing list archive
-
rohc team
-
Mailing list archive
-
Message #00027
Re: RTP header-only compressor
Hi Didier,
>
>
> > I'm trying to come up with an implementation, using the ROHC library,
> > that compresses only the RTP header, and not the UDP and IP headers.
>
> As far as I know, there is no defined profile for RTP-only compression.
> So you have to define the mechanisms and packet formats you want to
> use. The ones defined for IP/UDP/RTP are probably not adequate for your
> RTP-only profile.
So I take it this means that the packet types defined in [cd]_generic.c
wouldn't work, and I'd have to define totally new packet types? I noticed
that in the library the IR, IR_DYN, UO, UOR packets contain IP-specific
parameters..
>
>
> > Correct me if I'm on the wrong tack, but I've been trying to base it
> > upon modified versions of c_rtp.c, c_rtp.h, d_rtp.c, d_rtp.h files. I
> > also added an additional profile in rohc_comp.c, rohc_comp.h,
> > rohc_decomp.c and rohc_decomp.h.
> >
> > However IP-field compression parameters are used in many methods in
> > the library.
> >
> > Could you give me some pointers on how to modify these source files
> > (such as c-generic.c) to only compress and decompress using the RTP
> > header field-related compression parameters (TS), and not IP-ID or the
> > IP fields?
>
> Depending on the profile you want to define, you may or may not be on
> the correct track :) If your profile does not compress IP headers at
> all, re-using the c_rtp.[ch] and d_rtp.[ch] source files is probably
> not the best choice. They frequently do IP-specific actions that you
> don't need at all.
>
> The shortest path to setup a RTP-only profile is probably starting from
> scratch with a new blank profile. To create a new profile, you have to
> initialise one instance of the c_profile structure and one instance of
> the d_structure structure. The first one is for the compression
> profile and the second one for the decompression profile.
>
> The c_profile structure is described in details here:
> http://barvaux.org/~didier/rohc/rohc-doc-latest/structc__profile.html<http://barvaux.org/%7Edidier/rohc/rohc-doc-latest/structc__profile.html>
> The d_profile structure is described in details here:
> http://barvaux.org/~didier/rohc/rohc-doc-latest/structd__profile.html<http://barvaux.org/%7Edidier/rohc/rohc-doc-latest/structd__profile.html>
>
> For the profile ID, temporarily choose a free one in the list published
> by the IANA: http://www.iana.org/assignments/rohc-pro-ids/
>
>
> Hereafter is an example for defining a new compression profile:
>
> /**
> * @brief Define the compression part of the RTP-only profile
> */
> struct c_profile c_rtponly_profile =
> {
> IPPROTO_UDP, /* IP protocol */
> rtp_port, /* list of UDP ports for RTP packets */
> ROHC_PROFILE_RTPONLY, /* profile ID for RTP-only profile */
> "0.1", /* profile version */
> "RTP-only / Compressor", /* profile description */
> c_rtponly_create, /* profile handlers */
> c_rtponly_destroy,
> c_rtponly_check_context,
> c_rtponly_encode,
> c_rtponly_feedback,
> };
>
> You have then to define the 5 functions c_rtponly_* listed above. To
> define them, use the API documentation and look at the simplest of all
> profiles: the Uncompressed profile defined in c_uncompressed.[ch].
>
> You have then to do the same task for the decompression profile.
>
> Hope it helps!
>
Thanks a lot Didier, your guidelines are indeed very helpful.
Regards,
Josephine
References