Отвечая на мой собственный вопрос, вы можете использовать «DispatcherOneToMany», а затем изменить источник диспетчера, в то время как вы хотите переключить роль «Ведущий». Это работает как шарм.
Пример создания диспетчера и добавления в него нового клиента:
private void start(final WebSocketSession session, JsonObject jsonMessage)
{
// ---- Media pipeline
log.info("[Handler::start] Adding a new client!");
final UserSession user = new UserSession();
users.put(session.getId(), user);
if(pipeline==null){
log.info("[Handler::start] Create Media Pipeline");
pipeline = kurento.createMediaPipeline();
dispatcher = new DispatcherOneToMany.Builder(pipeline).build();
}
final WebRtcEndpoint webRtcEp = new WebRtcEndpoint.Builder(pipeline).build();
user.setWebRtcEndpoint(webRtcEp);
HubPort hubPort = new HubPort.Builder(dispatcher).build();
user.setHubPort(hubPort);
hubPort.connect(webRtcEp);
webRtcEp.connect(hubPort);
if(users.size()==1) {
log.info("[Handler::start] It's first user, then set it as source");
dispatcher.setSource(hubPort);
}
[...]
А затем переключите источник, когда хотите, добавив для этого новое сообщение и сделав это следующим образом:
UserSession user = users.get(sessionId);
if (user != null) {
log.info("[Handler::presenterSwitch] Switching presenter to: {} ", sessionId);
dispatcher.setSource(user.getHubPort());
}else{
log.error("[Handler::presenterSwitch] Trying to switch to an no-existent session: {}", sessionId);
}
Надеюсь, это кому-нибудь поможет, счастливое кодирование.