*/
- RTP_BUG_ACCEPT_ANY_PACKETS = (1 << 7)
+ RTP_BUG_ACCEPT_ANY_PACKETS = (1 << 7),
/*
Oracle's Contact Center Anywhere (CCA) likes to use a single RTP socket to send all its outbound audio.
*/
+ RTP_BUG_GEN_ONE_GEN_ALL = (1 << 8)
+
+ /*
+ Some RTP endpoints (and by some we mean *cough* _SONUS_!) do not like it when the timestamps jump forward or backwards in time.
+ So say you are generating a file that says "please wait for me to complete your call, or generating ringback"
+ Now you place and outbound call and you are bridging. Well, while you were playing the file, you were generating your own RTP timestamps.
+ But, now that you have a remote RTP stream, you'd rather send those timestamps as-is in case they will be fed to a remote jitter buffer......
+ Ok, so this causes the audio to completely fade out despite the fact that we send the mark bit which should give them heads up its happening.
+
+ Sigh, This flag will tell FreeSWITCH that if it ever generates even one RTP packet itself, to continue to generate all of them and ignore the
+ actual timestamps in the frames.
+
+ */
+
+
} switch_rtp_bug_flag_t;
#ifdef _MSC_VER
}
handle->samples = context->fh.samples;
- handle->samplerate = context->fh.samplerate;
- handle->channels = context->fh.channels;
+ //handle->samplerate = context->fh.samplerate;
+ //handle->channels = context->fh.channels;
handle->format = context->fh.format;
handle->sections = context->fh.sections;
handle->seekable = context->fh.seekable;
if (switch_stristr("~ACCEPT_ANY_PACKETS", str)) {
*flag_pole &= ~RTP_BUG_ACCEPT_ANY_PACKETS;
}
+
+ if (switch_stristr("GEN_ONE_GEN_ALL", str)) {
+ *flag_pole |= RTP_BUG_GEN_ONE_GEN_ALL;
+ }
+
+ if (switch_stristr("~GEN_ONE_GEN_ALL", str)) {
+ *flag_pole &= ~RTP_BUG_GEN_ONE_GEN_ALL;
+ }
}
char *sofia_glue_gen_contact_str(sofia_profile_t *profile, sip_t const *sip, sofia_dispatch_event_t *de, sofia_nat_parse_t *np)
fwd = (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_RAW_WRITE) && switch_test_flag(frame, SFF_RAW_RTP)) ? 1 : 0;
+ if (!fwd && switch_test_flag(rtp_session, SWITCH_RTP_FLAG_RAW_WRITE) && (rtp_session->rtp_bugs & RTP_BUG_GEN_ONE_GEN_ALL)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Generating RTP locally but timestamp passthru is configured, disabling....\n");
+ switch_clear_flag(rtp_session, SWITCH_RTP_FLAG_RAW_WRITE);
+ }
+
switch_assert(frame != NULL);
if (switch_test_flag(frame, SFF_CNG)) {