Related issue:

https://issues.asterisk.org/jira/browse/ASTERISK-23142


In the big jitterbuffer patch in 2006 ther was code that sets a flag on a 
AST_FRAME
that it contains time stamp information. This is set on all incoming RTP audio 
frames.

When sending RTP we reset the timestamp to the one in the frame if this flag is 
set.

Now, if we have a call on hold this is dangerous.

Alice calls Bob and he answers.
-> we take the incoming TS and send out to Bob in the RTP stream

Alice puts Bob on hold
 -> we activate MOH and raise the TS with 160 for every RTP packet

Alice puts Bob off hold
 -> We get RTP from Alice with a new time stamp and reset ours

This can lead to a big jump in time stamps and in our case lead to loss of 
audio.

I don't see any reason to change the TS like this in the outbound stream. It's 
an
unrelated stream and we set the TS on different grounds.

We could shange the SSRC when this happens, but I already have systems 
complaining over the way Asterisk change SSRC every time we detect a problem, 
so I don't think it's a good idea (TM).

I can understand why the jitter buffer for an incoming RTP stream needs to know 
if a 
stream has timing info, but I don't see a reason for us using the same timing 
on the
outbound stream.

Does anyone see any harm in deleting the piece of code that resets the 
timestamp,
overriding the calculations for a new time stamp already done in the RTP write 
code?


/O


Index: res/res_rtp_asterisk.c
===================================================================
--- res/res_rtp_asterisk.c      (revision 417744)
+++ res/res_rtp_asterisk.c      (working copy)
@@ -1238,9 +1238,14 @@
                rtp->lastdigitts = rtp->lastts;
        }
 
+#ifdef MAYBE_BROKEN_CODE
+       /* This means that we strictly follow the timestamps of the incoming 
stream, which may
+          be unrelated to our send stream. I think it's a bad idea. /OEJ 
+         */
        if (ast_test_flag(frame, AST_FRFLAG_HAS_TIMING_INFO)) {
                rtp->lastts = frame->ts * rate;
        }
+#endif
 
        ast_rtp_instance_get_remote_address(instance, &remote_address);
 


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to