diff --git a/pc/media_session.cc b/pc/media_session.cc index 6d8a9a4891..4fd3efa521 100644 --- a/pc/media_session.cc +++ b/pc/media_session.cc @@ -1512,8 +1512,11 @@ std::unique_ptr MediaSessionDescriptionFactory::CreateOffer( AudioCodecs offer_audio_codecs; VideoCodecs offer_video_codecs; RtpDataCodecs offer_rtp_data_codecs; - GetCodecsForOffer(current_active_contents, &offer_audio_codecs, - &offer_video_codecs, &offer_rtp_data_codecs); + GetCodecsForOffer( + current_active_contents, &offer_audio_codecs, &offer_video_codecs, + session_options.data_channel_type == DataChannelType::DCT_SCTP + ? nullptr + : &offer_rtp_data_codecs); if (!session_options.vad_enabled) { // If application doesn't want CN codecs in offer. StripCNCodecs(&offer_audio_codecs); @@ -1930,7 +1933,10 @@ void MediaSessionDescriptionFactory::GetCodecsForOffer( // Add our codecs that are not in the current description. MergeCodecs(all_audio_codecs_, audio_codecs, &used_pltypes); MergeCodecs(all_video_codecs_, video_codecs, &used_pltypes); - MergeCodecs(rtp_data_codecs_, rtp_data_codecs, &used_pltypes); + // Only allocate a payload type for rtp datachannels when using rtp data + // channels. + if (rtp_data_codecs) + MergeCodecs(rtp_data_codecs_, rtp_data_codecs, &used_pltypes); } // Getting codecs for an answer involves these steps: