Я пользуюсь 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();
}
Данный код работает только для одного потока.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я использую GraphQL в веб-сервисе на Spring Boot и мне надо написать мутацию для обновления объектов InvoiceВ схеме эти типы определены следующим образом:
Я хочу реализовать Recycler View, в котором по нажатии на item будет появляться фрагментНо я у меня не работает метод getSupportFragmentManager(), я пытался подставлять...
Простите, как я могу обратиться к методу getName из активности NavigationActivity?