FS-5895 --resolve
This commit is contained in:
parent
2c1a25d5f8
commit
719850e508
|
@ -706,6 +706,7 @@ typedef enum {
|
||||||
SWITCH_RTP_FLAG_PAUSE,
|
SWITCH_RTP_FLAG_PAUSE,
|
||||||
SWITCH_RTP_FLAG_FIR,
|
SWITCH_RTP_FLAG_FIR,
|
||||||
SWITCH_RTP_FLAG_PLI,
|
SWITCH_RTP_FLAG_PLI,
|
||||||
|
SWITCH_RTP_FLAG_RESET,
|
||||||
SWITCH_RTP_FLAG_INVALID
|
SWITCH_RTP_FLAG_INVALID
|
||||||
} switch_rtp_flag_t;
|
} switch_rtp_flag_t;
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,6 @@
|
||||||
#define MASTER_KEY_LEN 30
|
#define MASTER_KEY_LEN 30
|
||||||
#define RTP_MAGIC_NUMBER 42
|
#define RTP_MAGIC_NUMBER 42
|
||||||
#define MAX_SRTP_ERRS 10
|
#define MAX_SRTP_ERRS 10
|
||||||
#define RTP_TS_RESET 1
|
|
||||||
|
|
||||||
#define DTMF_SANITY (rtp_session->one_second * 30)
|
#define DTMF_SANITY (rtp_session->one_second * 30)
|
||||||
|
|
||||||
|
@ -4273,6 +4272,7 @@ static void do_2833(switch_rtp_t *rtp_session)
|
||||||
|
|
||||||
rtp_session->dtmf_data.timestamp_dtmf = rtp_session->last_write_ts + samples;
|
rtp_session->dtmf_data.timestamp_dtmf = rtp_session->last_write_ts + samples;
|
||||||
rtp_session->last_write_ts = rtp_session->dtmf_data.timestamp_dtmf;
|
rtp_session->last_write_ts = rtp_session->dtmf_data.timestamp_dtmf;
|
||||||
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 0;
|
||||||
|
|
||||||
wrote = switch_rtp_write_manual(rtp_session,
|
wrote = switch_rtp_write_manual(rtp_session,
|
||||||
rtp_session->dtmf_data.out_digit_packet,
|
rtp_session->dtmf_data.out_digit_packet,
|
||||||
|
@ -4306,7 +4306,7 @@ SWITCH_DECLARE(void) rtp_flush_read_buffer(switch_rtp_t *rtp_session, switch_rtp
|
||||||
|
|
||||||
|
|
||||||
if (switch_rtp_ready(rtp_session)) {
|
if (switch_rtp_ready(rtp_session)) {
|
||||||
rtp_session->last_write_ts = RTP_TS_RESET;
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
|
||||||
rtp_session->flags[SWITCH_RTP_FLAG_FLUSH] = 1;
|
rtp_session->flags[SWITCH_RTP_FLAG_FLUSH] = 1;
|
||||||
reset_jitter_seq(rtp_session);
|
reset_jitter_seq(rtp_session);
|
||||||
|
|
||||||
|
@ -6048,7 +6048,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
|
||||||
if ((rtp_session->rtp_bugs & RTP_BUG_NEVER_SEND_MARKER)) {
|
if ((rtp_session->rtp_bugs & RTP_BUG_NEVER_SEND_MARKER)) {
|
||||||
m = 0;
|
m = 0;
|
||||||
} else {
|
} else {
|
||||||
if ((rtp_session->last_write_ts != RTP_TS_RESET && rtp_session->ts > (rtp_session->last_write_ts + (rtp_session->samples_per_interval * 10)))
|
if ((!rtp_session->flags[SWITCH_RTP_FLAG_RESET] && rtp_session->ts > (rtp_session->last_write_ts + (rtp_session->samples_per_interval * 10)))
|
||||||
|| rtp_session->ts == rtp_session->samples_per_interval) {
|
|| rtp_session->ts == rtp_session->samples_per_interval) {
|
||||||
m++;
|
m++;
|
||||||
}
|
}
|
||||||
|
@ -6075,13 +6075,13 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m) {
|
if (m) {
|
||||||
rtp_session->last_write_ts = RTP_TS_RESET;
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
|
||||||
rtp_session->ts = 0;
|
rtp_session->ts = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the marker was set, and the timestamp seems to have started over - set a new SSRC, to indicate this is a new stream */
|
/* If the marker was set, and the timestamp seems to have started over - set a new SSRC, to indicate this is a new stream */
|
||||||
if (m && !switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_SEND) && (rtp_session->rtp_bugs & RTP_BUG_CHANGE_SSRC_ON_MARKER) &&
|
if (m && !switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_SEND) && (rtp_session->rtp_bugs & RTP_BUG_CHANGE_SSRC_ON_MARKER) &&
|
||||||
(rtp_session->last_write_ts == RTP_TS_RESET || (rtp_session->ts <= rtp_session->last_write_ts && rtp_session->last_write_ts > 0))) {
|
(rtp_session->flags[SWITCH_RTP_FLAG_RESET] || (rtp_session->ts <= rtp_session->last_write_ts && rtp_session->last_write_ts > 0))) {
|
||||||
switch_rtp_set_ssrc(rtp_session, (uint32_t) ((intptr_t) rtp_session + (uint32_t) switch_epoch_time_now(NULL)));
|
switch_rtp_set_ssrc(rtp_session, (uint32_t) ((intptr_t) rtp_session + (uint32_t) switch_epoch_time_now(NULL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6269,11 +6269,11 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
|
||||||
this_ts = ntohl(send_msg->header.ts);
|
this_ts = ntohl(send_msg->header.ts);
|
||||||
|
|
||||||
if (abs(rtp_session->last_write_ts - this_ts) > 16000) {
|
if (abs(rtp_session->last_write_ts - this_ts) > 16000) {
|
||||||
rtp_session->last_write_ts = RTP_TS_RESET;
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!switch_rtp_ready(rtp_session) || rtp_session->sending_dtmf || !this_ts ||
|
if (!switch_rtp_ready(rtp_session) || rtp_session->sending_dtmf || !this_ts ||
|
||||||
(rtp_session->last_write_ts > RTP_TS_RESET && this_ts < rtp_session->last_write_ts)) {
|
(!rtp_session->flags[SWITCH_RTP_FLAG_RESET] && this_ts < rtp_session->last_write_ts)) {
|
||||||
send = 0;
|
send = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6386,6 +6386,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
|
||||||
}
|
}
|
||||||
|
|
||||||
rtp_session->last_write_ts = this_ts;
|
rtp_session->last_write_ts = this_ts;
|
||||||
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 0;
|
||||||
|
|
||||||
if (rtp_session->queue_delay) {
|
if (rtp_session->queue_delay) {
|
||||||
rtp_session->delay_samples = rtp_session->queue_delay;
|
rtp_session->delay_samples = rtp_session->queue_delay;
|
||||||
|
@ -6597,7 +6598,7 @@ SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_fra
|
||||||
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_WARNING, "Generating RTP locally but timestamp passthru is configured, disabling....\n");
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_WARNING, "Generating RTP locally but timestamp passthru is configured, disabling....\n");
|
||||||
rtp_session->flags[SWITCH_RTP_FLAG_RAW_WRITE] = 0;
|
rtp_session->flags[SWITCH_RTP_FLAG_RAW_WRITE] = 0;
|
||||||
rtp_session->last_write_ts = RTP_TS_RESET;
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_assert(frame != NULL);
|
switch_assert(frame != NULL);
|
||||||
|
@ -6782,6 +6783,7 @@ SWITCH_DECLARE(int) switch_rtp_write_manual(switch_rtp_t *rtp_session,
|
||||||
|
|
||||||
if (((*flags) & SFF_RTP_HEADER)) {
|
if (((*flags) & SFF_RTP_HEADER)) {
|
||||||
rtp_session->last_write_ts = ts;
|
rtp_session->last_write_ts = ts;
|
||||||
|
rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = (int) bytes;
|
ret = (int) bytes;
|
||||||
|
|
Loading…
Reference in New Issue