Skip to content

Commit 5e464bb

Browse files
committed
Work in progress: resolve media attributes for inbound call according to SDP. Issue #1550.
1 parent 40764dd commit 5e464bb

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

  • restcomm
    • restcomm.commons/src/main/java/org/restcomm/connect/commons/util
    • restcomm.telephony/src/main/java/org/restcomm/connect/telephony

restcomm/restcomm.commons/src/main/java/org/restcomm/connect/commons/util/SdpUtils.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,28 @@ public static boolean isWebRTCSDP(final String contentType, final byte[] data) t
141141
return isWebRTC;
142142
}
143143

144+
public static boolean isAudioSDP(final String contentType, final byte[] data) throws SdpParseException {
145+
boolean isAudioSdp = false;
146+
if (contentType.equalsIgnoreCase("application/sdp")) {
147+
String sdp = getSdp(contentType, data);
148+
if (sdp != null && sdp.contains("m=audio") || sdp.contains("m=AUDIO")
149+
|| sdp.contains("m=Audio")) {
150+
isAudioSdp = true;
151+
}
152+
}
153+
return isAudioSdp;
154+
}
155+
156+
public static boolean isVideoSDP(final String contentType, final byte[] data) throws SdpParseException {
157+
boolean isVideoSdp = false;
158+
if (contentType.equalsIgnoreCase("application/sdp")) {
159+
String sdp = getSdp(contentType, data);
160+
if (sdp != null && sdp.contains("m=video") || sdp.contains("m=VIDEO")
161+
|| sdp.contains("m=Video")) {
162+
isVideoSdp = true;
163+
}
164+
}
165+
return isVideoSdp;
166+
}
167+
144168
}

restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/Call.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,19 @@ private CreateMediaSession generateRequest(SipServletMessage sipMessage) throws
13801380
}
13811381
offer = SdpUtils.patch(sipMessage.getContentType(), sdp, externalIp);
13821382
}
1383-
return new CreateMediaSession("sendrecv", offer, false, webrtc, inboundCallSid);
1383+
1384+
//Prepare media attributes to be used by call controller
1385+
final boolean isAudioSdp = SdpUtils.isAudioSDP(sipMessage.getContentType(), sipMessage.getRawContent());
1386+
final boolean isVideoSdp = SdpUtils.isVideoSDP(sipMessage.getContentType(), sipMessage.getRawContent());
1387+
if(isAudioSdp && isVideoSdp){
1388+
//Call with audio and video
1389+
mediaAttributes = new MediaAttributes(MediaAttributes.MediaType.AUDIO_VIDEO, MediaAttributes.VideoResolution.SEVEN_TWENTY_P);
1390+
} else if (isVideoSdp) {
1391+
//Call with video and no audio
1392+
mediaAttributes = new MediaAttributes(MediaAttributes.MediaType.VIDEO_ONLY, MediaAttributes.VideoResolution.SEVEN_TWENTY_P);
1393+
} //mediaAttributes remains with default value (AUDIO_ONLY) if both isAudioSdp and isVideoSdp are false
1394+
1395+
return new CreateMediaSession("sendrecv", offer, false, webrtc, inboundCallSid, mediaAttributes);
13841396
}
13851397

13861398
private final class UpdatingMediaSession extends AbstractAction {

0 commit comments

Comments
 (0)