kurento: Как записывать веб-камеру на рекордер в webm и mp4?

я изменил учебник Куренто one2many (https://github.com/Kurento/kurento-tutorial-java/blob/master/kurento-one2many-call/src/main/java/org/kurento/tutorial/one2manycall/CallHandler.java) для записи потока с веб-камеры в файл mp4 или webm, как показано ниже.

Здесь я закомментировал RecorderEndpoint, записывающий mp4.

У меня вопрос, как я могу записать оба файла (webm и mp4) только с одной WebRtcEndpoint? Я думал об использовании DispatcherOneToMany (http://www.kurento.org/docs/4.2.0/kmf-media-api/com/kurento/kmf/media/DispatcherOneToMany.html), но setSource нуждается в HubPort, которого я не получил для работы с моим мастером WebRtcEndpointWebRtc. Итак, как я могу отправить masterWebRtc двум RecorderEndpoint?

Спасибо за любую помощь.

private synchronized void master(WebSocketSession session,
        JsonObject jsonMessage) throws IOException {
    if (masterUserSession == null) {
        masterUserSession = new UserSession(session);

        pipeline = kurento.createMediaPipeline();
        masterUserSession.setWebRtcEndpoint(new WebRtcEndpoint.Builder(
                pipeline).build());

        WebRtcEndpoint masterWebRtc = masterUserSession.getWebRtcEndpoint();
        String sdpOffer = jsonMessage.getAsJsonPrimitive("sdpOffer")
                .getAsString();
        String sdpAnswer = masterWebRtc.processOffer(sdpOffer);

        JsonObject response = new JsonObject();
        response.addProperty("id", "masterResponse");
        response.addProperty("response", "accepted");
        response.addProperty("sdpAnswer", sdpAnswer);
        masterUserSession.sendMessage(response);

        //RecorderEndpoint recorderEndpoint =  new RecorderEndpoint.Builder(pipeline,"file:///tmp/recording.mp4").withMediaProfile(MediaProfileSpecType.MP4).build();
       RecorderEndpoint recorderEndpoint =  new RecorderEndpoint.Builder(pipeline,"file:///tmp/recording.webm").withMediaProfile(MediaProfileSpecType.WEBM).build();
        masterWebRtc.connect(recorderEndpoint);
        recorderEndpoint.record();

    } else {
        JsonObject response = new JsonObject();
        response.addProperty("id", "masterResponse");
        response.addProperty("response", "rejected");
        response.addProperty("message",
                "Another user is currently acting as sender. Try again later ...");
        session.sendMessage(new TextMessage(response.toString()));
    }
}

person John Doe    schedule 16.11.2014    source источник


Ответы (1)


В Kurento все медиаэлементы являются «один ко многим», что означает, что вы можете подключить исходный медиаэлемент к любому количеству медиаэлементов получателя. После вашего кода:

RecorderEndpoint recorderEndpointA =  new RecorderEndpoint.Builder(pipeline,"file:///tmp/recording.mp4").withMediaProfile(MediaProfileSpecType.MP4).build();
RecorderEndpoint recorderEndpointB =  new RecorderEndpoint.Builder(pipeline,"file:///tmp/recording.webm").withMediaProfile(MediaProfileSpecType.WEBM).build();

masterWebRtc.connect(recorderEndpointA); //masterWebRtc is source, recorderEndpointA is sink
masterWebRtc.connect(recorderEndpointB); //masterWebRtc is source, recorderEndpointB is sink

//you could connect masterWebRtc to other additional elements here if you want.

recorderEndpointA.record();
recorderEndpointB.record();
person lulop    schedule 17.11.2014
comment
большое спасибо, теперь он работает. Одна из моих проблем заключалась в том, что позже я добавил .withMediaProfile (MediaProfileSpecType.MP4) в свои тесты. Это означает, что если вы не используете MediaProfileSpecType, по умолчанию kurento сохраняет веб-контент, хотя расширение файла было mp4 - не знаю, почему я подумал, что кодировка зависит от расширения файла. моя вина. - person John Doe; 18.11.2014