Skip to content

Commit 40764dd

Browse files
committed
Work in progress: configuration of the media sessions for JSR309 call and bridge controllers. Issue #1550.
1 parent 5e89fa1 commit 40764dd

3 files changed

Lines changed: 52 additions & 45 deletions

File tree

restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/entities/MediaAttributes.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public MediaAttributes() {
5050
}
5151

5252
/**
53-
* Constructor for audio-video or video-only media sessions
53+
* Constructor for audio-video or video-only media sessions (conference calls)
5454
*
5555
* @param mediaType
5656
* @param videoMode
@@ -70,6 +70,16 @@ public MediaAttributes(final MediaType mediaType, final VideoMode videoMode, fin
7070
this.videoOverlay = videoOverlay;
7171
}
7272

73+
/**
74+
* Constructor for audio-video or video-only media sessions (outbound calls / fork)
75+
*
76+
* @param mediaType
77+
* @param videoResolution
78+
*/
79+
public MediaAttributes(final MediaType mediaType, final VideoResolution videoResolution){
80+
this(mediaType, null, videoResolution, null, null);
81+
}
82+
7383
public MediaType getMediaType() {
7484
return mediaType;
7585
}
@@ -91,12 +101,16 @@ public String getVideoOverlay() {
91101
}
92102

93103
public enum MediaType {
94-
AUDIO_ONLY("audio_only"), VIDEO_ONLY("video_only"), AUDIO_VIDEO("audio_video");
104+
AUDIO_ONLY("audio_only", new String[] {"audio"}),
105+
VIDEO_ONLY("video_only", new String[] {"video"}),
106+
AUDIO_VIDEO("audio_video", new String[] {"audio", "video"});
95107

96108
private final String text;
109+
private final String[] codecPolicy;
97110

98-
MediaType(final String text) {
111+
MediaType(final String text, final String[] codecPolicy) {
99112
this.text = text;
113+
this.codecPolicy = codecPolicy;
100114
}
101115

102116
public static MediaType getValueOf(final String text) {
@@ -114,6 +128,9 @@ public String toString() {
114128
return text;
115129
}
116130

131+
public String[] getCodecPolicy() {
132+
return codecPolicy;
133+
}
117134
}
118135

119136
public enum VideoMode {

restcomm/restcomm.mscontrol.jsr309/src/main/java/org/restcomm/connect/mscontrol/jsr309/Jsr309BridgeController.java

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.joda.time.DateTime;
5454
import org.restcomm.connect.dao.DaoManager;
5555
import org.restcomm.connect.dao.RecordingsDao;
56+
import org.restcomm.connect.dao.entities.MediaAttributes;
5657
import org.restcomm.connect.dao.entities.Recording;
5758
import org.restcomm.connect.commons.dao.Sid;
5859
import org.restcomm.connect.commons.fsm.FiniteStateMachine;
@@ -445,22 +446,32 @@ public Initializing(ActorRef source) {
445446
@Override
446447
public void execute(Object message) throws Exception {
447448
try {
449+
CreateMediaSession msg = (CreateMediaSession) message;
450+
MediaAttributes mediaAttributes = msg.mediaAttributes();
451+
448452
// Create media session
449453
mediaSession = msControlFactory.createMediaSession();
450454

451455
// Create the media group with recording capabilities
452456
mediaGroup = mediaSession.createMediaGroup(MediaGroup.PLAYER_RECORDER_SIGNALDETECTOR);
453457
mediaGroup.getRecorder().addListener(recorderListener);
454458

455-
// Set default conference video resolution to 720p
456-
// mediaSession.setAttribute("CONFERENCE_VIDEO_SIZE", "720p");
457-
458-
// Allow only two participants and one media group
459-
Parameters mixerParams = mediaSession.createParameters();
460-
mixerParams.put(MediaMixer.MAX_PORTS, 3);
459+
if (MediaAttributes.MediaType.VIDEO_ONLY.equals(mediaAttributes.getMediaType())) {
460+
// video only
461+
configureVideoMediaSession(mediaAttributes);
462+
Parameters mixerParams = createMixerParams();
463+
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO_VIDEO, mixerParams);
464+
} else if (MediaAttributes.MediaType.AUDIO_VIDEO.equals(mediaAttributes.getMediaType())) {
465+
// audio and video
466+
configureVideoMediaSession(mediaAttributes);
467+
Parameters mixerParams = createMixerParams();
468+
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO_VIDEO, mixerParams);
469+
} else {
470+
// audio only
471+
Parameters mixerParams = createMixerParams();
472+
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO, mixerParams);
473+
}
461474

462-
// Create the bridge
463-
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO, mixerParams);
464475
mediaMixer.addListener(mixerAllocationListener);
465476
mediaMixer.confirm();
466477
// Wait for event confirmation before sending response to the conference
@@ -470,6 +481,18 @@ public void execute(Object message) throws Exception {
470481
}
471482
}
472483

484+
private void configureVideoMediaSession(final MediaAttributes mediaAttributes) {
485+
// resolution configuration
486+
mediaSession.setAttribute("CONFERENCE_VIDEO_SIZE", mediaAttributes.getVideoResolution().toString());
487+
}
488+
489+
private Parameters createMixerParams() {
490+
// Allow only two participants and one media group
491+
Parameters mixerParams = mediaSession.createParameters();
492+
mixerParams.put(MediaMixer.MAX_PORTS, 3);
493+
return mixerParams;
494+
}
495+
473496
}
474497

475498
private final class Active extends AbstractAction {

restcomm/restcomm.mscontrol.jsr309/src/main/java/org/restcomm/connect/mscontrol/jsr309/Jsr309CallController.java

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ public class Jsr309CallController extends MediaServerController {
123123
private final State failed;
124124

125125
// JSR-309 runtime stuff
126-
private static final String[] CODEC_POLICY_AUDIO = new String[] { "audio", "video" };
127-
128126
private final MsControlFactory msControlFactory;
129127
private final MediaServerInfo mediaServerInfo;
130128
private MediaSession mediaSession;
@@ -864,25 +862,6 @@ public void execute(Object message) throws Exception {
864862
// Create network connection
865863
networkConnection = mediaSession.createNetworkConnection(NetworkConnection.BASIC);
866864

867-
if (MediaAttributes.MediaType.VIDEO_ONLY.equals(mediaAttributes.getMediaType())) {
868-
// video only
869-
configureVideoMediaSession(mediaAttributes);
870-
Parameters mixerParams = createMixerParams();
871-
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO_VIDEO, mixerParams);
872-
} else if (MediaAttributes.MediaType.AUDIO_VIDEO.equals(mediaAttributes.getMediaType())) {
873-
// audio and video
874-
configureVideoMediaSession(mediaAttributes);
875-
Parameters mixerParams = createMixerParams();
876-
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO_VIDEO, mixerParams);
877-
} else {
878-
// audio only
879-
Parameters mixerParams = createMixerParams();
880-
mediaMixer = mediaSession.createMediaMixer(MediaMixer.AUDIO, mixerParams);
881-
}
882-
883-
//TODO mediaMixer.addListener(mixerAllocationListener);
884-
mediaMixer.confirm();
885-
886865
// Distinguish between WebRTC and SIP calls
887866
Parameters sdpParameters = mediaSession.createParameters();
888867
Map<String, String> configurationData = new HashMap<String, String>();
@@ -897,7 +876,7 @@ public void execute(Object message) throws Exception {
897876
networkConnection.setParameters(sdpParameters);
898877

899878
CodecPolicy codecPolicy = new CodecPolicy();
900-
codecPolicy.setMediaTypeCapabilities(CODEC_POLICY_AUDIO);
879+
codecPolicy.setMediaTypeCapabilities(mediaAttributes.getMediaType().getCodecPolicy());
901880

902881
networkConnection.getSdpPortManager().setCodecPolicy(codecPolicy);
903882
networkConnection.getSdpPortManager().addListener(sdpListener);
@@ -910,18 +889,6 @@ public void execute(Object message) throws Exception {
910889
fsm.transition(e, failed);
911890
}
912891
}
913-
914-
private void configureVideoMediaSession(final MediaAttributes mediaAttributes) {
915-
// resolution configuration
916-
mediaSession.setAttribute("CONFERENCE_VIDEO_SIZE", mediaAttributes.getVideoResolution().toString());
917-
}
918-
919-
private Parameters createMixerParams() {
920-
Parameters mixerParams = mediaSession.createParameters();
921-
mixerParams.put(MediaMixer.MAX_PORTS, 900);
922-
return mixerParams;
923-
}
924-
925892
}
926893

927894
private final class UpdatingMediaSession extends AbstractAction {

0 commit comments

Comments
 (0)