
En un
artículo anterior, describí mi experimento con la aplicación HelloWorld del tutorial de Kurento. En este artículo, continuaré revisando aplicaciones web en Java Spring y Kurento Media Server-a.
La siguiente aplicación en el tutorial se llama WebRTC Magic Mirror. Del nombre se deduce que el espejo refleja una realidad ligeramente adornada. En esta aplicación, además de la anterior, se utiliza el filtro de visión artificial FaceOverlay. Cuando se detecta un rostro humano en la cámara, el Kurento Media Server "pone" una gorra de Super Mario en su cabeza. Si hay varias caras en la lente, todos llevan una gorra.
Inicie Kurento Media Server
sudo service kurento-media-server start
Si ya ha clonado el tutorial de Kurento Java, no ejecute el siguiente comando:
git clone https://github.com/Kurento/kurento-tutorial-java.git
Ir al directorio del proyecto
cd kurento-tutorial-java/kurento-magic-mirror
Recopilamos el proyecto por el equipo de Maven.
mvn compile exec:java
O, como en mi caso, comencemos por la Idea.
En el navegador Firefox, vaya a https: // localhost: 8443 /
En la ventana que se abre, haga clic en el botón "Inicio", debería ver una imagen:

De esta experiencia concluimos: la cara de mi gato no se parece en nada a una cara humana, por lo que la gorra de Super Mario no es apropiada para él.
Veamos cómo funciona este ejemplo.
La estructura de la aplicación repite la aplicación HelloWorld anterior. Tres bloques de aplicaciones interactúan en la aplicación: en el código Java Script del lado del navegador, en el lado del servidor, la aplicación web Spring-Boot que administra el Kurento Media Server. Estos bloques de programas intercambian mensajes entre sí en función del protocolo Json.

El diagrama muestra que en KMS, el bloque de programa WebRtcEndpoint ya no envuelve la transmisión de la señal multimedia para la recepción, sino que primero la pasa a través del FaceOverlayFilter, que determina la presencia de una cara en la imagen.
El intercambio de señal entre los bloques del programa es aproximadamente el mismo que en la aplicación HelloWorld.

Las acciones principales en la aplicación se realizan al hacer clic en el botón "Inicio". Se crea una MediaPipeline a través de la cual se transmitirá el tráfico de medios, se crean los elementos de medios WebRtcEndpoint y FaceOverlayFilter, y se crea una conexión entre ellos.
Aquí hay una secuencia simplificada de declaraciones que forma una cadena de bloques de programa para una aplicación dada.
MediaPipeline pipeline = kurento.createMediaPipeline(); WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint.Builder(pipeline).build(); FaceOverlayFilter faceOverlayFilter = new FaceOverlayFilter.Builder(pipeline).build(); webRtcEndpoint.connect(faceOverlayFilter); faceOverlayFilter.connect(webRtcEndpoint);
Considere la siguiente aplicación del tutorial de Kurento llamada RTP Receiver.
Si no se inició, inicie Kurento Media Server
sudo service kurento-media-server start
Si ya ha clonado el tutorial de Kurento Java, no ejecute el siguiente comando:
git clone https://github.com/Kurento/kurento-tutorial-java.git
Ir al directorio del proyecto
cd kurento-tutorial-java/kurento-rtp-receiver
Recopilamos el proyecto por el equipo de Maven.
mvn compile exec:java
o, como en mi caso, comencemos por la Idea.
En el navegador Firefox, vaya a https: // localhost: 8443 /
en la ventana que se abre, haga clic en el botón "Inicio"

En la ventana de información de conexión KMS, aparecen datos para configurar el comando para Gstreamer: audio, puerto de video, dirección IP. Estos datos, así como la ruta al archivo, deben especificarse en el comando.
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'
Por cierto, verifique si tiene instalado Gstreamer
gst-launch-1.0 —gst-version
Enmarcado los puertos y esas cosas, en la consola lanzaron el comando Gstreamer-a.
Ahora, la atención está jugando a la lotería. No sé si tu archivo se reproducirá o no. De mi colección de clips bastante pobre, los archivos con la extensión * .mpg comenzaron a reproducirse

Aquí, se reproduce el clip de Natalia Mogilevskaya. Los clips con una extensión diferente no se reproducen o se reproducen con sonido distorsionado.
De esta experiencia concluimos: no todos los yogures son igualmente útiles.
Analizaremos el funcionamiento de esta aplicación. Primero, se crea una canalización de medios para transmitir tráfico de medios, así como RtpEndpoint y WebRtcEndpoint, este último realiza el trabajo del receptor de paquetes RTP y se utiliza para mostrar un videoclip.
Aquí hay una secuencia simplificada de declaraciones para esta parte de la aplicación Java:
final MediaPipeline pipeline = kurento.createMediaPipeline(); final RtpEndpoint rtpEp = makeRtpEndpoint(pipeline, useSrtp); final WebRtcEndpoint webRtcEp = new WebRtcEndpoint.Builder(pipeline).build(); rtpEp.connect(webRtcEp);
Esto concluye la revisión de esta parte del tutorial de Kurento. Que tengas una buena programación!
KurentoTutorial de KurentoArtículo anterior