Куренто, Один ко многим; возможность изменить источник - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужен только один докладчик для многих зрителей, но в какой-то момент один из них может стать докладчиком, не отключая весь конвейер.

Это возможно? Я просматриваю документацию и примеры, но нигде не вижу этого варианта использования

1 Ответ

0 голосов
/ 01 октября 2018

Отвечая на мой собственный вопрос, вы можете использовать «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);
    }

Надеюсь, это кому-нибудь поможет, счастливое кодирование.

...