Запись нескольких медиа потоков в 1 фаил Kurento

131
10 ноября 2019, 02:40

Я пользуюсь Kurento, пытаюсь записывать несколько видео потоков в один файл. https://doc-kurento.readthedocs.io/en/stable/tutorials/java/tutorial-recorder.html Тут у меня все работает отлично, но не могу реализовать такую же запись, только не одного потока, а сразу нескольких. https://doc-kurento.readthedocs.io/en/stable/tutorials/java/tutorial-groupcall.html То есть воспользоваться групповым звонком и при создании комнаты начинать записывать поток первого пользователя, который вошел. Как только зайдет еще один пользователь в данную комнату, добавить в recorder еще один видео поток и т.д. В итоге после того как последний пользователь вышел из комнаты, хочу получить файл в котором будет это все записано последовательно.

public UserSession(final String name, final boolean haveMedia, String roomName, final WebSocketSession session, MediaPipeline pipeline) {

    this.pipeline = pipeline;
    this.name = name;
    this.haveMedia = haveMedia;
    this.session = session;
    this.roomName = roomName;

    this.outgoingMedia = new WebRtcEndpoint.Builder(pipeline).build();
    this.outgoingMedia.addIceCandidateFoundListener(new EventListener<IceCandidateFoundEvent>() {
        @Override
        public void onEvent(IceCandidateFoundEvent event) {
            JsonObject response = new JsonObject();
            response.addProperty("id", "iceCandidate");
            response.addProperty("name", name);
            response.add("candidate", JsonUtils.toJsonObject(event.getCandidate()));
            try {
                synchronized (session) {
                    session.sendMessage(new TextMessage(response.toString()));
                }
            } catch (IOException e) {
                log.debug(e.getMessage());
            }
        }
    });

    String RECORDER_FILE_PATH = "file:///tmp/HelloWorldRecordedddd.webm";
    this.recorderEndpoint = new RecorderEndpoint.Builder(this.pipeline, RECORDER_FILE_PATH).build();
    setRecordedListeners(this.recorderEndpoint);
    connectAccordingToProfile(this.outgoingMedia, this.recorderEndpoint);
}
private void connectAccordingToProfile(WebRtcEndpoint webRtcEndpoint, RecorderEndpoint recorder) {
    webRtcEndpoint.connect(recorder, MediaType.AUDIO);
    webRtcEndpoint.connect(recorder, MediaType.VIDEO);
}

public void receiveVideoFrom(UserSession sender, String sdpOffer) throws IOException { log.info("USER {}: connecting with {} in room {}", this.name, sender.getName(), this.roomName);

    log.trace("USER {}: SdpOffer for {} is {}", this.name, sender.getName(), sdpOffer);
    final String ipSdpAnswer = this.getEndpointForUser(sender).processOffer(sdpOffer);
    final JsonObject scParams = new JsonObject();
    scParams.addProperty("id", "receiveVideoAnswer");
    scParams.addProperty("name", sender.getName());
    scParams.addProperty("sdpAnswer", ipSdpAnswer);
    log.trace("USER {}: SdpAnswer for {} is {}", this.name, sender.getName(), ipSdpAnswer);
    this.sendMessage(scParams);
    log.debug("gather candidates");
    this.getEndpointForUser(sender).gatherCandidates();
    this.recorderEndpoint.record();
}

Данный код работает только для одного потока.

READ ALSO
GraphQL Expected type to be a GraphQLInputType, but it wasn&#39;t!

GraphQL Expected type to be a GraphQLInputType, but it wasn't!

Я использую GraphQL в веб-сервисе на Spring Boot и мне надо написать мутацию для обновления объектов InvoiceВ схеме эти типы определены следующим образом:

141
Не работает метод getSupportFragmentManager()

Не работает метод getSupportFragmentManager()

Я хочу реализовать Recycler View, в котором по нажатии на item будет появляться фрагментНо я у меня не работает метод getSupportFragmentManager(), я пытался подставлять...

183
Обратиться к функции другого класса

Обратиться к функции другого класса

Простите, как я могу обратиться к методу getName из активности NavigationActivity?

216