From 9b9723cbe8f5d4d48c66a406d05a548ac5bf4002 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 5 Apr 2007 19:29:48 +0000 Subject: [PATCH] fix rtp issue git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4863 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- conf/sofia.conf.xml | 3 +++ src/mod/endpoints/mod_dingaling/mod_dingaling.c | 4 +--- src/mod/endpoints/mod_sofia/mod_sofia.h | 3 ++- src/mod/endpoints/mod_sofia/sofia.c | 4 ++++ src/mod/endpoints/mod_sofia/sofia_glue.c | 7 ++++++- src/switch_rtp.c | 5 ++--- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/conf/sofia.conf.xml b/conf/sofia.conf.xml index cdf62a5108..7ac9707e4c 100644 --- a/conf/sofia.conf.xml +++ b/conf/sofia.conf.xml @@ -31,6 +31,9 @@ + + + diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index a9e0c93732..8641755602 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -829,15 +829,13 @@ static int activate_rtp(struct private_object *tech_pvt) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SETUP RTP %s:%d -> %s:%d\n", tech_pvt->profile->ip, tech_pvt->local_port, tech_pvt->remote_ip, tech_pvt->remote_port); - flags = SWITCH_RTP_FLAG_GOOGLEHACK | SWITCH_RTP_FLAG_AUTOADJ; + flags = SWITCH_RTP_FLAG_GOOGLEHACK | SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_RAW_WRITE | SWITCH_RTP_FLAG_AUTO_CNG; //flags = SWITCH_RTP_FLAG_AUTOADJ; if (switch_test_flag(tech_pvt->profile, TFLAG_TIMER)) { flags |= SWITCH_RTP_FLAG_USE_TIMER; } - flags |= SWITCH_RTP_FLAG_AUTO_CNG; - if (!(tech_pvt->rtp_session = switch_rtp_new(tech_pvt->profile->ip, tech_pvt->local_port, tech_pvt->remote_ip, diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 7253e820bf..b4398a1eff 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -105,7 +105,8 @@ typedef enum { PFLAG_FULL_ID = (1 << 3), PFLAG_PRESENCE = (1 << 4), PFLAG_PASS_RFC2833 = (1 << 5), - PFLAG_DISABLE_TRANSCODING = (1 << 6) + PFLAG_DISABLE_TRANSCODING = (1 << 6), + PFLAG_REWRITE_TIMESTAMPS = (1 << 7) } PFLAGS; typedef enum { diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index cd64e5c138..4bbc08a9e4 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -547,6 +547,10 @@ switch_status_t config_sofia(int reload) if (switch_true(val)) { profile->pflags |= PFLAG_DISABLE_TRANSCODING; } + } else if (!strcasecmp(var, "rtp-rewrite-timestamps")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_REWRITE_TIMESTAMPS; + } } else if (!strcasecmp(var, "auth-calls")) { if (switch_true(val)) { profile->pflags |= PFLAG_AUTH_CALLS; diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index df2f43fdff..4ee0f69b43 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -682,7 +682,7 @@ switch_status_t sofia_glue_activate_rtp(private_object_t * tech_pvt) bw = tech_pvt->read_codec.implementation->bits_per_second; ms = tech_pvt->read_codec.implementation->microseconds_per_frame; - flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_RAW_WRITE | SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_DATAWAIT); + flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_DATAWAIT); if (switch_test_flag(tech_pvt, TFLAG_BUGGY_2833)) { flags |= SWITCH_RTP_FLAG_BUGGY_2833; @@ -693,6 +693,11 @@ switch_status_t sofia_glue_activate_rtp(private_object_t * tech_pvt) flags |= SWITCH_RTP_FLAG_PASS_RFC2833; } + if (!((tech_pvt->profile->pflags & PFLAG_REWRITE_TIMESTAMPS) || + ((val = switch_channel_get_variable(channel, "rtp_rewrite_timestamps")) && switch_true(val)))) { + flags |= SWITCH_RTP_FLAG_RAW_WRITE; + } + if (tech_pvt->cng_pt) { flags |= SWITCH_RTP_FLAG_AUTO_CNG; } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 157afcf696..128e936e76 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -1307,6 +1307,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session, void *data, uint32_t data switch_core_timer_check(&rtp_session->timer); rtp_session->last_write_samplecount = rtp_session->timer.samplecount; } + switch_socket_sendto(rtp_session->sock, rtp_session->remote_addr, 0, (void *) send_msg, &bytes); } @@ -1410,7 +1411,6 @@ SWITCH_DECLARE(int) switch_rtp_write(switch_rtp_t *rtp_session, void *data, uint SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_frame_t *frame, uint32_t ts) { uint8_t fwd = 0; - uint8_t packetize = 0; void *data; uint32_t len; switch_payload_t payload; @@ -1421,7 +1421,6 @@ SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_fra } fwd = (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_RAW_WRITE) && switch_test_flag(frame, SFF_RAW_RTP)) ? 1 : 0; - packetize = (rtp_session->samples_per_interval > frame->datalen && (frame->payload == rtp_session->payload)) ? 1 : 0; if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO) || !rtp_session->remote_addr) { return -1; @@ -1435,7 +1434,7 @@ SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_fra payload = rtp_session->payload; } - if (fwd && !packetize) { + if (fwd) { data = frame->packet; len = frame->packetlen; } else {