Hi, Alexander Thanks for your reply. Much appreciated. (and the other reply, too).
Good to hear that the re-INVITE works for you. I've done a little digging inside the code and it seems to me that something is getting confused in the dejitter buffer (class MprDejitter in sipXmediaLib). During the re-INVITE scenario, the media gateway switches over to a new RTP stream (it is sending me a PCMA RTP stream before the re-INVITE, then switches to a PCMU RTP stream afterwards. The SIP exchange contains the proper SDP negotiation for the new codec type). In the trace fragment below, 47.129.106.75 is my little test client, and 47.135.211.232 is the media gateway that is hosting the audio conference. You can see that the media gateway is sending PCMA RTP packets up until the time where it sends the SIP re-INVITE. My test client then replies with the appropriate SIP messages. In the SDP data (which I've not included here) associated with these SIP messages, a new port and new codec is negotiated for the new RTP stream that will be sent by the media gateway after the re-INVITE. Then, the media gateway starts sending packets along this new RTP stream. So, here's the interesting point: The packet stream going from my client to the media gateway changes it's codec from PCMA to PCMU, but the timestamp, sequence number maintain their incrementing sequence, and SSRC id remains unchanged. However, for the packet stream coming back from my media gateway, the timestamp and sequence number are reset to new values, and the SSRC id changes. This is the part that seems to trip up code in MprDejitter. In the method pullPacket(), there's a check that compares an existing timestamp value with the timestamp value from a new packet. This check causes the code that retrieves the packet to be bypassed, effectively causing the packet to be dropped. All of the packets from the point of switchover on get dropped because of this (and this is probably why I don't hear anything after this point). So, the question is this: is the media gateway doing something improper by switching to a new SSRC id, and resetting sequence id and timestamp? Or is there something amiss with this bit of logic in pullPacket(). I'm not familiar enough with the standards to know this is valid behavior or not. No. Time Source Destination Protocol Info 3494 24.633243000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMA, SSRC=0x4A5425E6, Seq=618, Time=885647077 3495 24.651004000 47.135.211.232 47.129.106.75 RTP PT=ITU-T G.711 PCMA, SSRC=0x95070000, Seq=2941, Time=3132451048 3496 24.653266000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMA, SSRC=0x4A5425E6, Seq=619, Time=885647237 3497 24.670539000 47.135.211.232 47.129.106.75 RTP PT=ITU-T G.711 PCMA, SSRC=0x95070000, Seq=2942, Time=3132451208 3498 24.673185000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMA, SSRC=0x4A5425E6, Seq=620, Time=885647397 3500 24.691061000 47.135.211.232 47.129.106.75 SIP/SDP Request: INVITE sip:[email protected]:6060, with session description 3501 24.693107000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMA, SSRC=0x4A5425E6, Seq=621, Time=885647557 3502 24.693878000 47.135.211.232 47.129.106.75 ICMP Destination unreachable (Port unreachable) 3503 24.695575000 47.129.106.75 47.135.211.232 SIP Status: 100 Trying 3504 24.699837000 47.129.106.75 47.135.211.232 RTP Unknown RTP version 0 3506 24.700186000 47.135.211.232 47.129.106.75 ICMP Destination unreachable (Port unreachable) 3508 24.707695000 47.129.106.75 47.135.211.232 SIP/SDP Status: 200 OK, with session description 3509 24.713177000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMU, SSRC=0x4A5425E6, Seq=622, Time=885647717 3510 24.713955000 47.135.211.232 47.129.106.75 ICMP Destination unreachable (Port unreachable) 3511 24.719948000 47.135.211.232 47.129.106.75 SIP Request: ACK sip:[email protected]:6060 3512 24.733115000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMU, SSRC=0x4A5425E6, Seq=623, Time=885647877 3521 24.753133000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMU, SSRC=0x4A5425E6, Seq=624, Time=885648037 3522 24.758177000 47.135.211.232 47.129.106.75 RTP PT=ITU-T G.711 PCMU, SSRC=0xE8E, Seq=22427, Time=26582 3523 24.773143000 47.129.106.75 47.135.211.232 RTP PT=ITU-T G.711 PCMU, SSRC=0x4A5425E6, Seq=625, Time=885648197 3524 24.778966000 47.135.211.232 47.129.106.75 RTP PT=ITU-T G.711 PCMU, SSRC=0xE8E, Seq=22428, Time=26742 [... Etc etc ... ] ...Andrew -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Alexander Chemeris Sent: Thursday, July 09, 2009 3:25 PM To: Lavigne, Andrew (CAR:PC00) Cc: [email protected] Subject: Re: [sipxtapi-dev] Input audio sometimes not connected properly Hi Andrew, We use sipXtapi a lot with our own Bridge (also sipXtapi-based), and it works perfectly with re-INVITE. So, no, this issue is not known. It would be helpful if you post here WireShark capture of the session with the note when audio is lost. Then we'll be able to see what's going. Also I'd recommend to add a simple audio logging to a file to MprDecode::doProcessFrame(). Just create a file, named after resource name (getName()) and write all audio data from 'outBufs[0]' right before "return TRUE". Then look into the file - what does it contains. On Thu, Jul 9, 2009 at 7:43 PM, Andrew Lavigne<[email protected]> wrote: > Hi, All > > I'm getting the sense that this list is not all that active. Still, I > have a troublesome issue upon which I really really hope someone can > give me some insight. > > Using a simple little client with Sipxtapi, I'm setting up a SIP call > with an audio RTP stream to an audio conference bridge on a media gateway. > Mostly, everything gets set up ok: The initial SIP Invite goes as > expected, the initial RTP stream for setting up the conference works > perfectly fine. > Then, the media gateway sends my client a sip re-INVITE, along with a > new SDP for the new audio stream that will be used for the actual conference. > I'm looking at the SIP and RTP data in wireshark and everything gets > set up perfectly... > > EXCEPT that most of the time, the RTP stream that comes back from the > media gateway into sipxtapi seems to be improperly connected up. I > see the proper RTP packets coming into sipxtapi, but I hear nothing in > my speakers. Once in a blue moon, the issue does not manifest and I hear > everything fine. > Then I'll run it again and - poof - no audio can be heard (even though > in wireshark I can clearly see it being sent from the media gateway > into my app). > > It seems like something is not quite right down in the medialib > somewhere - some sort of race condition or timing issue. Sometimes it > works, sometimes it doesn't. I'm poking around, placing debug lines > and breakpoints, trying to isolate the problem, but so far no luck. > My questions to any experts out there are: > > 1) is there any sort of known issue like this in sipxmedialib? If so, > is there some easy workaround? > 2) any sort of hint as to where I'd look in order to verify if the RTP > packets are getting mixed in properly into the Flow Graph? That would > be helpful, too. > > 3) any other ideas that I have not yet thought of. > > Please, please... if anyone knowledgeable is out there reading this, > could they please give me a few minutes of their time. I would be > most appreciative. This bug (I'm going to call it a bug until proven > otherwise) is really wasting a lot of my time. > > Many thanks x 100, > ...Andrew Lavigne > > _______________________________________________ > sipxtapi-dev mailing list > [email protected] > List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/ > -- Regards, Alexander Chemeris. SIPez LLC. SIP VoIP, IM and Presence Consulting http://www.SIPez.com tel: +1 (617) 273-4000 _______________________________________________ sipxtapi-dev mailing list [email protected] List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/
