Java, Spring, Kurento und Mediendienste. Teil 2

Published on January 13, 2019

Java, Spring, Kurento und Mediendienste. Teil 2


    Im vorherigen Artikel habe ich mein Experiment mit der Anwendung „HelloWorld“ aus dem Kurento-Tutorial beschrieben. In diesem Artikel werde ich weiterhin Java Spring- und Kurento Media Server-Webanwendungen überprüfen.

    Die folgende App aus dem Tutorial heißt WebRTC Magic Mirror. Aus dem Namen folgt, dass der Spiegel ein bisschen verschönerte Realität widerspiegelt. In dieser Anwendung wird zusätzlich zu der vorherigen Anwendung der Computer-Vision-Filter „FaceOverlay-Filter“ angewendet. Wenn das Gesicht einer Person in einer Kamera erkannt wird, setzt Kurento Media Server eine Super Mario-Kappe auf den Kopf. Wenn sich mehrere Gesichter in der Linse befinden, trägt jeder eine Kappe.

    Starten Sie den Kurento Media Server

    sudo service kurento-media-server start

    Wenn Sie das Kurento Java-Lernprogramm bereits geklont haben, führen Sie den folgenden Befehl nicht aus:

    git clone https://github.com/Kurento/kurento-tutorial-java.git

    Wechseln Sie in das Projektverzeichnis

    cd kurento-tutorial-java/kurento-magic-mirror

    Wir stellen das Projekt mit dem Maven-Team zusammen.

    mvn compile exec:java

    Oder, wie in meinem Fall, starten wir von Idea.

    In Firefox, gehen an die Adresse https: // localhost: 8443 /

    In dem Fenster , das sehen sollte öffnet, klicken Sie auf die Schaltfläche «Start», um das Bild:

    Bild
    Aus dieser Erfahrung , die wir schließen: die Schnauze meiner Katze nicht wie ein Mensch sieht, so Mütze Super Mario er nicht gesetzt .

    Lassen Sie uns sehen, wie dieses Beispiel funktioniert.

    Die Struktur der Anwendung wiederholt die vorherige HelloWorld-Anwendung. In der Anwendung interagieren drei Softwareblöcke: Auf der Browserseite der Java Script-Code auf der Serverseite der Spring-Boot-Webanwendung, die den Kurento Media Server steuert. Diese Programmblöcke tauschen Nachrichten basierend auf dem Json-Protokoll miteinander aus.

    Bild

    Das Diagramm zeigt, dass der WebRtcEndpoint-Programmblock im KMS nicht mehr die Übertragung des Multimediasignals an den Empfang umschließt, sondern es durch den FaceOverlayFilter leitet, der das Vorhandensein eines Gesichts im Bild bestimmt.

    Der Austausch von Signalen zwischen Softwarebausteinen erfolgt in etwa wie in der HelloWorld-Anwendung.

    Bild

    Die Hauptaktionen in der Anwendung werden durch Klicken auf die Schaltfläche "Start" ausgeführt. MediaPipeline wird erstellt, über die der Medienverkehr übertragen wird, die Medienelemente WebRtcEndpoint und FaceOverlayFilter werden erstellt und eine Verbindung zwischen ihnen hergestellt.

    Hier ist eine vereinfachte Abfolge von Anweisungen, die eine Kette von Programmblöcken für eine bestimmte Anwendung bilden.

    MediaPipeline pipeline = kurento.createMediaPipeline();
    WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint.Builder(pipeline).build();
    FaceOverlayFilter faceOverlayFilter = new FaceOverlayFilter.Builder(pipeline).build();
    webRtcEndpoint.connect(faceOverlayFilter);
    faceOverlayFilter.connect(webRtcEndpoint);

    Betrachten Sie die folgende Anwendung aus dem Kurento Tutorial namens RTP Receiver.

    Wenn nicht, führen Sie Kurento Media Server aus

    sudo service kurento-media-server start

    Wenn Sie das Kurento Java-Lernprogramm bereits geklont haben, führen Sie den folgenden Befehl nicht aus:

    git clone https://github.com/Kurento/kurento-tutorial-java.git

    Wechseln Sie in das Projektverzeichnis

    cd kurento-tutorial-java/kurento-rtp-receiver

    Wir stellen das Projekt mit dem Maven-Team zusammen.

    mvn compile exec:java

    oder, wie in meinem Fall, starten wir von Idea.

    Gehen Sie im Firefox-Browser zu https: // localhost: 8443 /

    und klicken Sie im folgenden Fenster auf die Schaltfläche „Start".

    Bild

    Im Fenster mit den KMS-Verbindungsinformationen werden Daten zum Konfigurieren des Befehls für Gstreamer angezeigt: Audio, Video-Port, IP-Adresse. Diese Daten sowie der Dateipfad müssen im Befehl angegeben werden.

    PEER_A={KMS_AUDIO_PORT} PEER_V={KMS_VIDEO_PORT} PEER_IP={KMS_PUBLIC_IP} \
    SELF_PATH="{PATH_TO_VIDEO_FILE}" \
    SELF_A=5006 SELF_ASSRC=445566 \
    SELF_V=5004 SELF_VSSRC=112233 \
    bash -c 'gst-launch-1.0 -e \
            rtpbin name=r sdes="application/x-rtp-source-sdes,cname=(string)\"user\@example.com\"" \
            filesrc location="$SELF_PATH" ! decodebin name=d \
            d. ! queue ! audioconvert ! opusenc \
                    ! rtpopuspay ! "application/x-rtp,payload=(int)96,clock-rate=(int)48000,ssrc=(uint)$SELF_ASSRC" \
                    ! r.send_rtp_sink_0 \
            d. ! queue ! videoconvert ! x264enc tune=zerolatency \
                    ! rtph264pay ! "application/x-rtp,payload=(int)103,clock-rate=(int)90000,ssrc=(uint)$SELF_VSSRC" \
                    ! r.send_rtp_sink_1 \
            r.send_rtp_src_0 ! udpsink host=$PEER_IP port=$PEER_A bind-port=$SELF_A \
            r.send_rtcp_src_0 ! udpsink host=$PEER_IP port=$((PEER_A+1)) bind-port=$((SELF_A+1)) sync=false async=false \
            udpsrc port=$((SELF_A+1)) ! r.recv_rtcp_sink_0 \
            r.send_rtp_src_1 ! udpsink host=$PEER_IP port=$PEER_V bind-port=$SELF_V \
            r.send_rtcp_src_1 ! udpsink host=$PEER_IP port=$((PEER_V+1)) bind-port=$((SELF_V+1)) sync=false async=false \
            udpsrc port=$((SELF_V+1)) ! tee name=t \
                    t. ! queue ! r.recv_rtcp_sink_1 \
                    t. ! queue ! fakesink dump=true async=false'

    Überprüfen Sie übrigens, ob Sie Gstreamer installiert haben

    gst-launch-1.0 —gst-version

    Ersetzte Ports und Sachen, sie starteten den Befehl Gstreamer-a in der Konsole.

    Jetzt spielt Aufmerksamkeit die Lotterie. Ich weiß nicht, ob Sie die Datei abspielen werden oder nicht. Ich habe angefangen, Dateien mit der Endung * .mpg aus meiner armen Sammlung von Clips abzuspielen.

    Bild

    Hier ist der Clip von Natalia Mogilevskaya. Clips mit einer anderen Erweiterung werden entweder nicht oder mit Tonverzerrung wiedergegeben.

    Aus dieser Erfahrung schließen wir: Nicht alle Joghurts sind gleich nützlich.

    Wir analysieren die Arbeit dieser Anwendung. Zunächst wird die Medienpipeline zum Übertragen des Medienverkehrs sowie von RtpEndpoint und WebRtcEndpoint erstellt. Letztere übernimmt die Arbeit eines RTP-Paketempfängers und wird zum Anzeigen eines Videoclips verwendet.

    Hier ist eine vereinfachte Abfolge von Anweisungen für diesen Teil der Java-Anwendung:

    final MediaPipeline pipeline = kurento.createMediaPipeline();
    final RtpEndpoint rtpEp = makeRtpEndpoint(pipeline, useSrtp);
    final WebRtcEndpoint webRtcEp =
        new WebRtcEndpoint.Builder(pipeline).build();
    rtpEp.connect(webRtcEp);

    Damit ist die Überprüfung dieses Teils des Kurento-Tutorials abgeschlossen. Viel Spaß beim Programmieren!

    Kurento
    Kurento Tutorial
    Vorheriger Artikel