[Asterisk-Dev] Help Debugging Dropped Call Audio - Possibly Fixed

SteveK stevek at stevek.com
Sat Dec 24 10:19:27 MST 2005


On Dec 24, 2005, at 11:13 AM, Florian Overkamp wrote:

> Hi,
>
> Kevin P. Fleming wrote:
>>> That change passed only the first element of the array of  
>>> channels to ast_waitfor_n(), guaranteeing that it would win the  
>>> race to be read.  In conjunction with the swapping of the  
>>> channels in the array on each pass of the bridging loop, this  
>>> guarantees that each channel gets read an equal number of times.   
>>> I tested this by leaving the additional logging in place, making  
>>> the change, and placing a test call.  The call produced no  
>>> "WARNING" or "NOTICE" messages and the recording had no pops.
>> But it doesn't actually guarantee that at all... you have to keep  
>> in mind that the packet delivery from the channels is not  
>> consistent (jitter and packet loss come into play) and its very  
>> possible in this configuration to lose packets from a channel  
>> because you have decided to wait for a packet from the other one  
>> and the 'current' packet from that channel is late and/or lost. In  
>> that case, you will read from this channel, then read from the  
>> other channel, then go back to this one, even though the other  
>> channel still has a pending packet to be read.
>
> Actually, shouln't the bridge happen _after_ a jitterbuffer of  
> sorts ? In such a case the JB would return a 'no data' packet on  
> the read and leave it to the other end to decide what to do, or  
> simply generate an intermediate packet to cover it up ?

You wouldn't want to do that in the normal case, as it adds latency  
to the link, and the far end _still_ would need it's own jitterbuffer  
for the jitter and loss induced in the second leg of the trip -- it's  
better to just deal with it all at the eventual receiver.

On the other hand, in the case of Monitor()'ed calls, for ideal call  
recording quality, you'd want a jitterbuffer somewhere between the  
packets being received and being written to disk, but asterisk  
doesn't have that.   You could do that by enabling the jb for VoIP- 
 >VoIP calls when Monitor() is active, which would add latency to  
these calls, or some other way, which would require some more code to  
implement.




>
> I could be wrong though, I'm not that deep into the code these days.
>
> Florian
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
>
> Asterisk-Dev mailing list
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-dev
>




More information about the asterisk-dev mailing list