Client A <—> Asterisk PBX <----> Intermediate Gateway (asterisk too) <—> VoiP provider <----------> Client B.
Client A uses chan_sip.
Client A is calling to Client B.
Client B sends 183 SDP.
Client B answers, 200OK received on Intermediate Gateway and Asterisk PBX.
Asterisk PBX starts playing announcement to Client B.
Announcement stops. 200OK received on Client A.
Client A starts talking and generates new SSRC.
SSRC being changed on Intermediate Gateway.
RTP dropping between two call legs on Intermediate Gateway (probably because SSRC changed) near 8-10 seconds after playing announcement.
When Client A is not generating new SSRC - RTP not being dropped on Intermediate Gateway cause SSRC not changed here.
My tests:
So, when Client A is calling from IP Phone Yealink - New SSRC NOT generated when Client A starts talking.
When Client A is calling from Grandstream Wave softphone - New SSRC ALWAYS being GENERATED.
When Client A is calling from WebRTC - New SSRC NOT generated when Client A starts talking.
So, my questions:
What does such a behaviour depend from?
Why different UACs generate new SSRC and some do not?
How to force UAC (grandstream wave) from not generating new SSRC during RTP session?
Why intermediate gateway dropping some RTP packets during change SSRC?
I’m surprised that the SSRC passed through asterisk, unless, maybe, you had a native bridge. A problem Asterisk used to have and maybe still does, is that it didn’t preserve source changes. I’d suggest that is likely that “client” A is correct in changing the SSRC.
We really need quite detailed logging taken from the B2BUA, intermediate gateway, but my guess is that Server B is getting confused by a jump in timestamps, but that should only happen if the SSRC it sees doesn’t change, to reflect the new source of timestamps.
I say Server B, because your description of the call setup clearly indicates that B is a SIP User Agent Server.
Thx, saying “Server B” will be correct.
asterisk PBX - it is Asterisk 1.8
Intermediate Gateway - is Asterisk 13.38
Sory, I was a not clear a bit. SSRC not passed through. It changes between legs on Asterisk PBX and Intermediate Gateway too. But when SSRC changes on Intermediate Gateway between announcement stopped and start talking, Intermediate Gateway simply does not pass RTP into outbound call leg.
It droppes packets, received from inbound leg and do not send it out near 8-10 seconds after SSRC changes. On intermediate Gateway SSRC changes once after 200OK received and secondly when announcement stops playing.
In debug I can see these 10 seconds Received frame with no data for RTP instance '0x7fb240cda228' so dropping frame
In wireshark it seems that timestamps are good. Intermediate Gateway drops near 300 packets, some packets being send out yet during these 8-10 seconds. So voice flapped on Server B.
I dumped in Wireshark and noticed, that when Client A doesn’t re-generate SSRC when in starts talking, SSRC on Intermediate Gateway not being changed. And WebRTC, and Yealink doesn’t re-generate it.
But Grandstream Wave does.
I have two ways how to solve it (as I think so)
Force Grandstream Wave to not re-generate SSRC when answer
Fix dropping packets when SSRC changes on Intermediate Gateway.
But I have no any idea.