Hi,

At each event since like 27c3 (or maybe even 26c3), we comment out a
part of the rtp_send_frame method to solve some audio issues (glitch
and sometime progressively increasing delay).


This is the piece of code in question:

        {
                struct timeval tv, tv_diff;
                long int usec_diff, frame_diff;

                gettimeofday(&tv, NULL);
                tv_difference(&tv_diff, &rs->transmit.last_tv, &tv);
                rs->transmit.last_tv = tv;

                usec_diff = tv_diff.tv_sec * 1000000 + tv_diff.tv_usec;
                frame_diff = (usec_diff / 20000);

                if (abs(frame_diff) > 1) {
                        long int frame_diff_excess = frame_diff - 1;

                        LOGP(DLMUX, LOGL_NOTICE,
                                "Correcting frame difference of %ld
frames\n", frame_diff_excess);
                        rs->transmit.sequence += frame_diff_excess;
                        rs->transmit.timestamp += frame_diff_excess * duration;
                }
        }

 introduced by :

commit 392736d38bf9dae29800bde630c9ceee8a3914f3
Author: Harald Welte <[email protected]>
Date:   Sun Dec 20 13:16:14 2009 +0100

    RTP Proxy: Fix RTP sequence number and timestamp in case of dropped frames

    During handover, we will not send RTP frames for quite some time.  However,
    the way the rtp_send code is structured, it will increment the timestamp
    with a fixed amount every time we send a frame, independent how
much wallclock
    time has actually passed.

    This code is a hack to update the sequence number and timestamp in case it
    seems to be wrong.  It makes handover much more reliable.



Does this speak to anyone ?


Cheers,

    Sylvain

Reply via email to