[asterisk-dev] SIP: handling multiple m=video or m= audio lines

Vadim Lebedev vadim at mbdsys.com
Thu Sep 10 04:33:21 CDT 2009


Olle E. Johansson wrote:
> 9 sep 2009 kl. 23.02 skrev Mark Michelson:
>
>   
>> David Vossel wrote:
>>     
>>> ----- "Kevin P. Fleming" <kpfleming at digium.com> wrote:
>>>
>>>       
>>>> Mark Michelson wrote:
>>>>
>>>>         
>>>>> An even better idea would be to actually answer all streams, making
>>>>>           
>>>> sure to use
>>>>         
>>>>> a 0 port for any streams of a certain type beyond the first. The
>>>>>           
>>>> trouble with
>>>>         
>>>>> this is that chan_sip is not written to handle multiple streams of
>>>>>           
>>>> the same type
>>>>         
>>>>> at all. This means the changes would be far more invasive. With
>>>>>           
>>>> chan_sip being
>>>>         
>>>>> the house of cards that it is, plus the fact that this isn't  
>>>>> exactly
>>>>>           
>>>> the most
>>>>         
>>>>> pressing issue I've seen, I'm inclined to go with the reporter's
>>>>>           
>>>> solution unless
>>>>         
>>>>> there are strong objections.
>>>>>           
>>>> The most serious objection is that this is non-conformant with RFC
>>>> 3264
>>>> (as is our current implementation). If an SDP offer contains 'n' m=
>>>> lines, the answer MUST also contain 'n' m= lines. The answerer may
>>>> choose to decline any or all of those media stream offers by setting
>>>> them to port number 0 (and marking them as 'a=inactive' may not hurt
>>>> as
>>>> an additional measure), but it must respond to all of them.
>>>>
>>>> Failing to do so leads to exactly the sort of problem being  
>>>> discussed
>>>> here; the offerer cannot conclusively determine which streams the
>>>> answerer is accepting.
>>>>
>>>> We do not need to make chan_sip able to actually multiple *active*
>>>> streams of the same type, but if our goal is to be RFC compliant, we
>>>> should absolutely record the 'm=' line information for each offered
>>>> stream and ensure that our answer includes each one, properly marked
>>>> as
>>>> 'declined'. Whether this requires also including all the 'a=' lines
>>>> for
>>>> each stream I don't really know, but I suspect they would not be
>>>> required.
>>>>         
>>> I agree, the real fix here is to at least respond to all media  
>>> streams regardless if we are accepting them or not.  Like OEJ has  
>>> mentioned, given our current architecture even simply responding  
>>> with rejected media streams is not a simple task.  Given that our  
>>> current SDP parser is not RFC compliant, and the simple fix of only  
>>> responding to the first media stream of each type supported is  
>>> proven to give Asterisk a little better interoperability, does this  
>>> not sound like a valid change to be made until an architecture  
>>> change can be made in the future?
>>>
>>> ~Vossel
>>>
>>>       
>> Well, the problem is one that I brought up with you earlier. By  
>> responding only
>> to the first media stream of a given type, the offerer is still not  
>> guaranteed
>> to parse the reply "correctly." The user agent in the reporter's  
>> example works
>> appropriately in the situation, but we can't rely on user agents to  
>> all
>> interpret such a cryptic answer the same way.
>>
>> Here's an idea for how to approach this. First, don't even touch  
>> 1.4, since the
>> problem there is much different (it will respond with a 488 if an  
>> audio stream
>> and two video streams are offered). For 1.6.X, I think you could  
>> follow oej's
>> suggestion regarding having a configuration option which users can  
>> set if they
>> know that their UA will properly handle only having the first media  
>> stream of a
>> type answered. For trunk, I would suggest to do the right thing: do  
>> deeper work
>> to make sure all media streams for a given type at least have an  
>> answer, even if
>> all but one stream is rejected (though not necessarily the first  
>> stream
>> offered). I also would recommend waiting until 1.6.3 is branched  
>> before merging
>> this work into trunk so that there is more time for it to be out  
>> there before
>> being part of a branch.
>>
>> Also, on a side note, I checked RFC 4317 like oej suggested, and in  
>> those
>> examples, the a= lines *are* echoed for rejected media streams.
>>
>>     
> And, to repeat myself, in order to make sure that we answer everything  
> properly, including totally to us unknown media streams, we need to  
> save it in text format.
>
> /O
>   

I think it would be good occasion to implement better handling of fmtp
attributes for streams
handled in transparent way.  I mean that if endpoint A  calling endpoint
B has a fmtp attribute in video stream descriptor it should be fowarded
to B by asterisk.
Today it is scrapped.


Thanks
Vadim

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-dev/attachments/20090910/cc37851c/attachment-0001.htm 


More information about the asterisk-dev mailing list