rohc team mailing list archive
-
rohc team
-
Mailing list archive
-
Message #00025
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