← Back to team overview

rohc team mailing list archive

Re: RTP header-only compressor

 

Hi Josephine,

> 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.

> 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
The d_profile structure is described in details here:
http://barvaux.org/~didier/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!

Didier Barvaux
Viveris Technologies




Follow ups

References