> I however have a different problem with DTMF "events". I have an 
> application that talks to a device that detects incoming DTMF and
> converts to DTMF / Telephone event packets, without any audio.
> 
> However the tone events are getting buffered somewhere in the stack
> and then require additional packets to "push" them out.
> 
> I have been working through the code but I have not (yet) been able to
> figure out where the events are being buffered.
> 
> Has anyone got any pointers?
> 

My progress was to modify the Jitter Buffer processing to disable the
jitter buffering for "signalling Codecs".

In MprDejitter.cpp change the loop that pulls packets from the
jitter buffer to just any signalling signal regardless based
on the setting of the mpSignallingFlag.

The loop in MprDejitter::pullPacket becomes:

    for (int i = 0; i < MAX_RTP_PACKETS; i++)
    {
       // Check if this packet valid.
       if (  mStreamData.mpPackets[iNextPull].isValid() )
       {
           if ( !lockToTimestamp
                 ||  mStreamData.mpSignalingFlag[iNextPull]
                 || 
MpDspUtils::compareSerials(mStreamData.mpPackets[iNextPull]->getRtpTimestamp(),
                                               maxTimestamp) <= 0 )
           {
              found.swap(mStreamData.mpPackets[iNextPull]);
              mStreamData.mNumPackets--;
           }
       }

        // Wrap iNextPull counter if we reach end of buffer
       iNextPull = (iNextPull + 1) % MAX_RTP_PACKETS;
    }



This resolves my problem, but does this mean that last few packets of
audio remain "stuck" in the jitter buffer after the audio dries up?
Never to be played out?

Regards

Palu
_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/

Reply via email to