[asterisk-dev] func_jitterbuffer handling of masquerades
Corey Farrell
git at cfware.com
Thu Oct 30 20:06:55 CDT 2014
Hello everyone,
Review 3063 [1] is posted to address audio quality failure experienced
when certain masquerades occur on a channel with func_jitterbuffer
active. The goal of this change is to address situations where a
masquerade occurs due to Local channel optimization, and one or both
of the channels have active JB. This email refers to the channels of
the masquerade using variable names clonechan and original. Since
these are not very good names I will explain that clonechan is the
source and original is the destination of the masquerade. So by
default all the datastores / framehooks / etc should be copied from
clonechan to original. After the masquerade clonechan will soon die.
There are 3 possible scenarios involving masquerades with
func_jitterbuffer active:
1) JB is active on original but not clonechan
2) JB is active on clonechan but not original
3) JB is active on both
With the current code scenario 1 causes complete failure of audio
quality. This is caused by AST_JITTERBUFFER_FD being cleared on
original while the framehook is still active. This causes the
framehook to run without a functioning ast_timer, and nearly all
packets are rejected by the jitterbuffer.
The change I am proposing is that we always have an active JB after
masquerade if either side had one before the masquerade. So in
scenario 1 and 2 listed above this would cause the only active
jitterbuffer to remain active after a masquerade. For situations
where both channels have active jitterbuffer, we would always prefer
the jitterbuffer settings from clonechan.
[1] https://reviewboard.asterisk.org/r/3603/
More information about the asterisk-dev
mailing list