[asterisk-dev] AstriDevCon Recap - Call Setup Negotiation

Russell Bryant russell at digium.com
Thu May 31 15:51:20 MST 2007


Greetings,

One discussion we had at the developer conference was how to improve 
call setup negotiation.  I don't think we really came up with much of a 
plan here, but I'll try to put the notes I have into a readable form so 
that they are preserved in the archives and the discussion can continue.

* Short Term Plans

1) Code review needs to be done on the videocaps branch to determine 
whether this code can be merged into the trunk to improve the way video 
is currently handled in trunk.

* Long Term Plans

We spent a lot more of the time talking about what we'd like to do in 
this area in the long term.

1) Requirements

1.a) We need to be able to handle more codecs.  Our current bitfield 
method is near full and must be redesigned.

1.b) We need to be able to describe formats with more than just the 
format itself.  Many codecs, especially video, have various parameters 
associated with them that must be preserved.

1.c) Asterisk needs to have a way to change codecs in the middle of a 
call.  There are many cases where this can be useful to make calls more 
efficient.  In fact, every time a channel goes to a new application in 
the dialplan, it may be necessary to renegotiate formats.

1.d) Asterisk currently can only handle one audio stream and one video 
stream.  We need to be able to handle multiple streams.

1.e) In the design of a new way to handle formats, we should consider 
the information used in the offer/answer SDP model described in RFC 3264 
as a guide for how we handle things internally.

1.f) Our new format model should handle some data formats (such as with 
faxing) in addition to text, audio, and video.

1.g) Video format negotiation needs to be improved.

1.h) We should make sure we refuse unknown types of media streams.  We 
should certainly refuse transports that we don't know about.  Also, for 
now we should refuse codecs that we don't know about.  However, in the 
future, we should probably allow passthrough for codecs that we don't 
know about.

1.i) Currently, Asterisk can not handle a call without audio.  We should 
be able to handle a call that has video only, for example.

1.j) Transport parameters need to be included in the description of a 
format.  For example, IPv4 or v6.

2) Other notes ...

2.a) When playing back files, if we have a file in a format that was 
listed as supported, even if it is not the one currently being used, it 
should be sent anyway to avoid transcoding.  We can already change 
formats in the middle of a call for both SIP and IAX2 to a format that 
was agreed upon as supported in the initial call setup.

2.b) Video negotiation should be done down to one format, by 
recommendation by phone manufacturers.

2.c) If we offer G.729 for a call, even if it is not the preferred 
format, a license needs to be reserved, because the other side could 
start sending it at any time.

2.d) Someone suggested that configuring new codecs in a configuration 
file may be a useful way to add support for passthrough of new codec 
types without changing the code.  Everyone seemed to agree this was a 
good idea.

2.e) Briding calls between IPv4 and IPv6 was brought up.  This needs to 
be added to the decision tree for whether we should allow re-INVITEs or 
not.  Also, the SDP for a call may include offers for both IPv4 and 
IPv6.  This needs to be remembered for renegotiation purposes.

3) Where to begin?

The first step to improving all of this is to come up with a much more 
rich way to describe media formats in Asterisk.  Then, all of these 
other things will be implemented using this information.

4) IAX2 specific notes

4.a) Once we have a better way to describe formats in Asterisk, we 
should create a FORMAT information element that contains all of this 
information.  A series of these elements should be included in the NEW 
to indicate which formats are supported and preferred for a call.

4.b) We need a new frame type (called RENEW, or maybe something else) 
that can be sent in the middle of a call to initiate the renegotiation 
of formats.  The response to this should be an ACCEPT.  This frame 
should include a new list of FORMAT information elements.

4.c) We should probably have the FORMAT information elements dynamically 
mapped to a bit field.  That way, when we want to switch formats in the 
middle of a call to one of the formats already agreed upon, it can do so 
using the same means that it does today, by sending a voice full frame 
with a bit set to indicate which format is currently being sent.

-- 
Russell Bryant
Software Engineer
Digium, Inc.


More information about the asterisk-dev mailing list