Skip to content

Commit 554cec4

Browse files
authored
Keep the local track's RTP event capability when setting remote description on an RTP session (Fix issue-1164) (#1165)
* Fix issue-1164 Keep the local track's RTP event capability when setting remote description on an RTP session * Fix Issue-1164 Use .Any rather than catching an exception from .First
1 parent 06f8e3c commit 554cec4

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

src/net/RTP/MediaStream.cs

+18-8
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,7 @@ public MediaStreamTrack LocalTrack
169169
if (m_localTrack.Capabilities != null && !m_localTrack.NoDtmfSupport &&
170170
!m_localTrack.Capabilities.Any(x => x.ID == RTPSession.DTMF_EVENT_PAYLOAD_ID))
171171
{
172-
SDPAudioVideoMediaFormat rtpEventFormat = new SDPAudioVideoMediaFormat(
173-
SDPMediaTypesEnum.audio,
174-
RTPSession.DTMF_EVENT_PAYLOAD_ID,
175-
SDP.TELEPHONE_EVENT_ATTRIBUTE,
176-
RTPSession.DEFAULT_AUDIO_CLOCK_RATE,
177-
SDPAudioVideoMediaFormat.DEFAULT_AUDIO_CHANNEL_COUNT,
178-
"0-16");
179-
m_localTrack.Capabilities.Add(rtpEventFormat);
172+
m_localTrack.Capabilities.Add(DefaultRTPEventFormat);
180173
}
181174
}
182175
}
@@ -203,6 +196,23 @@ public MediaStreamTrack LocalTrack
203196
/// </summary>
204197
public IPEndPoint ControlDestinationEndPoint { get; set; }
205198

199+
/// <summary>
200+
/// Default RTP event format that we support.
201+
/// </summary>
202+
public static SDPAudioVideoMediaFormat DefaultRTPEventFormat
203+
{
204+
get
205+
{
206+
return new SDPAudioVideoMediaFormat(
207+
SDPMediaTypesEnum.audio,
208+
RTPSession.DTMF_EVENT_PAYLOAD_ID,
209+
SDP.TELEPHONE_EVENT_ATTRIBUTE,
210+
RTPSession.DEFAULT_AUDIO_CLOCK_RATE,
211+
SDPAudioVideoMediaFormat.DEFAULT_AUDIO_CHANNEL_COUNT,
212+
"0-16");
213+
}
214+
}
215+
206216
#endregion PROPERTIES
207217

208218
#region REORDER BUFFER

src/net/RTP/RTPSession.cs

+15-1
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,21 @@ public virtual SetDescriptionResultEnum SetRemoteDescription(SdpType sdpType, SD
10291029
SDPAudioVideoMediaFormat.SortMediaCapability(capabilities, currentMediaStream.LocalTrack?.Capabilities);
10301030

10311031
currentMediaStream.RemoteTrack.Capabilities = capabilities;
1032-
currentMediaStream.LocalTrack.Capabilities = capabilities;
1032+
1033+
// Keep the local track's RTP event capability
1034+
var currentLocalTrackCapabilities = currentMediaStream.LocalTrack.Capabilities;
1035+
SDPAudioVideoMediaFormat localRTPEventCapabilities;
1036+
if (currentLocalTrackCapabilities.Any(x => x.Name().ToLower() == SDP.TELEPHONE_EVENT_ATTRIBUTE))
1037+
{
1038+
localRTPEventCapabilities = currentLocalTrackCapabilities.First(x => x.Name().ToLower() == SDP.TELEPHONE_EVENT_ATTRIBUTE);
1039+
}
1040+
else
1041+
{
1042+
localRTPEventCapabilities = MediaStream.DefaultRTPEventFormat;
1043+
}
1044+
1045+
currentMediaStream.LocalTrack.Capabilities = capabilities.Where(x => x.Name().ToLower() != SDP.TELEPHONE_EVENT_ATTRIBUTE).ToList();
1046+
currentMediaStream.LocalTrack.Capabilities.Add(localRTPEventCapabilities);
10331047

10341048
if (currentMediaStream.MediaType == SDPMediaTypesEnum.audio)
10351049
{

0 commit comments

Comments
 (0)