[pjsip] Opus codec

Régis Montoya r3gis.3r at gmail.com
Sat May 12 14:45:29 EDT 2012


Hi all,

Just to inform that a new codec implementation is available in 
CSipSimple project.
It's for OPUS (http://opus-codec.org) codec (I've also updated SILK 
codec glue).

As usually with codecs made in CSipSimple it doesn't include makefile or 
toolchain for other platform, but the codec implementation (one file) 
itself is compatible with all platforms.
So if you need to use it for other platforms it should not be too hard 
(all the more so as libopus has standard gnu make files).

Source code : 
http://code.google.com/p/csipsimple/source/browse/trunk/CSipSimple/jni/opus/pj_sources/pj_opus.c

I've also a question/remark about new codecs integration in pjsip.
In CSipSimple I'm now able to load codecs dynamically from plugin 
applications. Thanks to the great design of codec api it's pretty easy 
to load dynamically codecs from dyn libs.

However, each time I add a new codec, I need to modify the known payload 
types of the pjsip stack and ensure it's not more than 127.
That's very annoying for 2 big reasons :
  * I will reach the limit very soon... in addition to all codecs 
supported by pjsip, I've added CODEC2, SILK, ISAC and OPUS. If you 
multiply by the number of frequency supported... ;)
Don't be confused, my point is not that I may potentially reach 127 in 
my SDP. Nobody will use all codecs at same time. The point is that even 
if I don't load or leave deactivated some codecs, the dynamic pt in SDP 
is static.
  * The second reason is that it's impossible to enrich the application 
only adding new plugins. Each time I want to create a new plugin I 
should update the pjsip stack *ONLY* to add new dynamic PT !
Well I could add new values but would lead to potential conflict.

So, I'm wondering if it would not be possible to make independent 
dynamic payload types (as announced by endpoint) and codec.
Maybe simply adding 0 in codec implementation and in endpoint when a 0 
is encountered, consider it should manage allocation of pt dynamically 
based on something it manages itself. For example with a map between 
dynamic pt created and codecs of codec manager (fully qualified name).
BTW, it will be possible to manage in the method allocating new pt 
numbers to reserve some dynamic types (for example the one for telephony 
event).

What do you think? Does that makes sense and could be added as a new 
ticket? Or is there technical reason why it shouldn't be done this way?

Regards,
Régis



More information about the pjsip mailing list