add RTP_BUG_IGNORE_MARK_BIT to list of bug tolerances
This commit is contained in:
parent
23b1fc6175
commit
d5ba2f3e3b
|
@ -554,7 +554,7 @@ typedef enum {
|
|||
*/
|
||||
|
||||
|
||||
RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1)
|
||||
RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1),
|
||||
/*
|
||||
Sonus wrongly expects that, when sending a multi-packet 2833 DTMF event, The sender
|
||||
should increment the RTP timestamp in each packet when, in reality, the sender should
|
||||
|
@ -573,6 +573,19 @@ typedef enum {
|
|||
|
||||
This flag will cause each packet to have a new timestamp.
|
||||
*/
|
||||
|
||||
|
||||
RTP_BUG_IGNORE_MARK_BIT = (1 << 2)
|
||||
|
||||
/*
|
||||
A Huawei SBC has been discovered that sends the mark bit on every single RTP packet.
|
||||
Since this causes the RTP stack to flush it's buffers, it horribly messes up the timing on the channel.
|
||||
|
||||
This flag will do nothing when an inbound packet contains the mark bit.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
} switch_rtp_bug_flag_t;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
|
|
@ -2125,6 +2125,13 @@ static void parse_rtp_bugs(sofia_profile_t *profile, const char *str)
|
|||
profile->auto_rtp_bugs &= ~RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
|
||||
}
|
||||
|
||||
if (switch_stristr("RTP_BUG_IGNORE_MARK_BIT", str)) {
|
||||
profile->auto_rtp_bugs |= RTP_BUG_IGNORE_MARK_BIT;
|
||||
}
|
||||
|
||||
if (switch_stristr("~RTP_BUG_IGNORE_MARK_BIT", str)) {
|
||||
profile->auto_rtp_bugs &= ~RTP_BUG_IGNORE_MARK_BIT;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -2043,7 +2043,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
|
|||
|
||||
if (rtp_session->jb && rtp_session->recv_msg.header.version == 2 && *bytes) {
|
||||
if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
|
||||
!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO)) {
|
||||
!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO) && !(rtp_session->rtp_bugs & RTP_BUG_IGNORE_MARK_BIT)) {
|
||||
stfu_n_reset(rtp_session->jb);
|
||||
}
|
||||
|
||||
|
@ -2395,7 +2395,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
|
|||
}
|
||||
|
||||
if (bytes && rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
|
||||
!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO)) {
|
||||
!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO) && !(rtp_session->rtp_bugs & RTP_BUG_IGNORE_MARK_BIT)) {
|
||||
rtp_flush_read_buffer(rtp_session, SWITCH_RTP_FLUSH_ONCE);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue