diff --git a/audio/channel.cc b/audio/channel.cc index 297c11142e..971d68b831 100644 --- a/audio/channel.cc +++ b/audio/channel.cc @@ -529,7 +529,6 @@ Channel::Channel(ProcessThread* module_process_thread, RtpReceiver::CreateAudioReceiver(Clock::GetRealTimeClock(), this, rtp_payload_registry_.get())), - telephone_event_handler_(rtp_receiver_->GetTelephoneEventHandler()), _outputAudioLevel(), _timeStamp(0), // This is just an offset, RTP module will add it's own // random offset @@ -616,7 +615,6 @@ void Channel::Init() { // disabled by the user. // After StopListen (when no sockets exists), RTCP packets will no longer // be transmitted since the Transport object will then be invalid. - telephone_event_handler_->SetTelephoneEventForwardToDecoder(true); // RTCP is enabled by default. _rtpRtcpModule->SetRTCPStatus(RtcpMode::kCompound); diff --git a/audio/channel.h b/audio/channel.h index 8d1a26b20e..9816e2928f 100644 --- a/audio/channel.h +++ b/audio/channel.h @@ -56,7 +56,6 @@ class RTPReceiverAudio; class RtpPacketReceived; class RtpRtcp; class RtpTransportControllerSendInterface; -class TelephoneEventHandler; struct SenderInfo; @@ -342,7 +341,6 @@ class Channel std::unique_ptr rtp_payload_registry_; std::unique_ptr rtp_receive_statistics_; std::unique_ptr rtp_receiver_; - TelephoneEventHandler* telephone_event_handler_; std::unique_ptr _rtpRtcpModule; std::unique_ptr audio_coding_; AudioSinkInterface* audio_sink_ = nullptr; diff --git a/modules/rtp_rtcp/include/rtp_receiver.h b/modules/rtp_rtcp/include/rtp_receiver.h index e15bbe410d..3868c61eb5 100644 --- a/modules/rtp_rtcp/include/rtp_receiver.h +++ b/modules/rtp_rtcp/include/rtp_receiver.h @@ -25,10 +25,6 @@ class TelephoneEventHandler { public: virtual ~TelephoneEventHandler() {} - // The following three methods implement the TelephoneEventHandler interface. - // Forward DTMFs to decoder for playout. - virtual void SetTelephoneEventForwardToDecoder(bool forward_to_decoder) = 0; - // Is TelephoneEvent configured with payload type payload_type virtual bool TelephoneEventPayloadType(const int8_t payload_type) const = 0; }; diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h index 56e1cd3e78..69e800e313 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h @@ -24,7 +24,6 @@ #define RTCP_CNAME_SIZE 256 // RFC 3550 page 44, including null termination #define IP_PACKET_SIZE 1500 // we assume ethernet -#define MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS 10 namespace webrtc { namespace rtcp { diff --git a/modules/rtp_rtcp/source/rtp_receiver_audio.cc b/modules/rtp_rtcp/source/rtp_receiver_audio.cc index 3d66fd57e4..22d5255fa8 100644 --- a/modules/rtp_rtcp/source/rtp_receiver_audio.cc +++ b/modules/rtp_rtcp/source/rtp_receiver_audio.cc @@ -27,7 +27,6 @@ RTPReceiverStrategy* RTPReceiverStrategy::CreateAudioStrategy( RTPReceiverAudio::RTPReceiverAudio(RtpData* data_callback) : RTPReceiverStrategy(data_callback), TelephoneEventHandler(), - telephone_event_forward_to_decoder_(true), telephone_event_payload_type_(-1), cng_nb_payload_type_(-1), cng_wb_payload_type_(-1), @@ -36,13 +35,6 @@ RTPReceiverAudio::RTPReceiverAudio(RtpData* data_callback) RTPReceiverAudio::~RTPReceiverAudio() = default; -// Outband TelephoneEvent(DTMF) detection -void RTPReceiverAudio::SetTelephoneEventForwardToDecoder( - bool forward_to_decoder) { - rtc::CritScope lock(&crit_sect_); - telephone_event_forward_to_decoder_ = forward_to_decoder; -} - bool RTPReceiverAudio::TelephoneEventPayloadType(int8_t payload_type) const { rtc::CritScope lock(&crit_sect_); return telephone_event_payload_type_ == payload_type; @@ -164,71 +156,6 @@ int32_t RTPReceiverAudio::ParseAudioCodecSpecific( return data_callback_->OnReceivedPayloadData(nullptr, 0, rtp_header); } - bool telephone_event_packet = - TelephoneEventPayloadType(rtp_header->header.payloadType); - if (telephone_event_packet) { - rtc::CritScope lock(&crit_sect_); - - // RFC 4733 2.3 - // 0 1 2 3 - // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - // | event |E|R| volume | duration | - // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - // - if (payload_data_length % 4 != 0) { - return -1; - } - size_t number_of_events = payload_data_length / 4; - - // sanity - if (number_of_events >= MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS) { - number_of_events = MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS; - } - for (size_t n = 0; n < number_of_events; ++n) { - RTC_DCHECK_GE(payload_data_length, (4 * n) + 2); - bool end = (payload_data[(4 * n) + 1] & 0x80) ? true : false; - - std::set::iterator event = - telephone_event_reported_.find(payload_data[4 * n]); - - if (event != telephone_event_reported_.end()) { - // we have already seen this event - if (end) { - telephone_event_reported_.erase(payload_data[4 * n]); - } - } else { - if (end) { - // don't add if it's a end of a tone - } else { - telephone_event_reported_.insert(payload_data[4 * n]); - } - } - } - - // RFC 4733 2.5.1.3 & 2.5.2.3 Long-Duration Events - // should not be a problem since we don't care about the duration - - // RFC 4733 See 2.5.1.5. & 2.5.2.4. Multiple Events in a Packet - } - - { - rtc::CritScope lock(&crit_sect_); - - // check if it's a DTMF event, hence something we can playout - if (telephone_event_packet) { - if (!telephone_event_forward_to_decoder_) { - // don't forward event to decoder - return 0; - } - std::set::iterator first = telephone_event_reported_.begin(); - if (first != telephone_event_reported_.end() && *first > 15) { - // don't forward non DTMF events - return 0; - } - } - } - return data_callback_->OnReceivedPayloadData(payload_data, payload_data_length, rtp_header); } diff --git a/modules/rtp_rtcp/source/rtp_receiver_audio.h b/modules/rtp_rtcp/source/rtp_receiver_audio.h index 1d3d6d42e0..3f779f6f0f 100644 --- a/modules/rtp_rtcp/source/rtp_receiver_audio.h +++ b/modules/rtp_rtcp/source/rtp_receiver_audio.h @@ -28,10 +28,6 @@ class RTPReceiverAudio : public RTPReceiverStrategy, explicit RTPReceiverAudio(RtpData* data_callback); ~RTPReceiverAudio() override; - // The following three methods implement the TelephoneEventHandler interface. - // Forward DTMFs to decoder for playout. - void SetTelephoneEventForwardToDecoder(bool forward_to_decoder) override; - // Is TelephoneEvent configured with |payload_type|. bool TelephoneEventPayloadType(const int8_t payload_type) const override; @@ -63,9 +59,7 @@ class RTPReceiverAudio : public RTPReceiverStrategy, size_t payload_length, const AudioPayload& audio_specific); - bool telephone_event_forward_to_decoder_; int8_t telephone_event_payload_type_; - std::set telephone_event_reported_; int8_t cng_nb_payload_type_; int8_t cng_wb_payload_type_; diff --git a/modules/rtp_rtcp/test/testAPI/test_api_audio.cc b/modules/rtp_rtcp/test/testAPI/test_api_audio.cc index fdd99decce..66166056bc 100644 --- a/modules/rtp_rtcp/test/testAPI/test_api_audio.cc +++ b/modules/rtp_rtcp/test/testAPI/test_api_audio.cc @@ -57,7 +57,8 @@ void VerifyDtmf(const uint8_t* payloadData, EXPECT_TRUE(event < 16u || event == 32u); EXPECT_FALSE(reserved); EXPECT_EQ(volume, 10u); - EXPECT_LE(duration, 6560u); + // Long duration for answer tone events only + EXPECT_TRUE(duration <= 1280 || event == 32u); } class VerifyingAudioReceiver : public RtpData {