
Em um
artigo anterior, descrevi meu experimento com o aplicativo HelloWorld no tutorial do Kurento. Neste artigo, continuarei analisando aplicativos da Web no Java Spring e no Kurento Media Server-a.
O próximo aplicativo no tutorial é chamado WebRTC Magic Mirror. Pelo nome, segue-se que o espelho reflete uma realidade um pouco embelezada. Nesta aplicação, além da anterior, é utilizado o filtro de visão computacional FaceOverlay. Quando um rosto humano é detectado na câmera, o Kurento Media Server "coloca" um boné de Super Mario em sua cabeça. Se houver várias faces na lente, todo mundo está usando um boné.
Iniciar o Kurento Media Server
sudo service kurento-media-server start
Se você já clonou o tutorial Java do Kurento, não execute o seguinte comando:
git clone https://github.com/Kurento/kurento-tutorial-java.git
Vá para o diretório do projeto
cd kurento-tutorial-java/kurento-magic-mirror
Nós compilamos o projeto pela equipe Maven
mvn compile exec:java
Ou, como no meu caso, vamos começar pela idéia.
No navegador Firefox, acesse https: // localhost: 8443 /
Na janela que se abre, clique no botão "Iniciar", você verá uma imagem:

A partir dessa experiência, concluímos: o rosto do meu gato não se parece com um humano, de modo que o boné do Super Mario não deveria ser para ele.
Vamos ver como esse exemplo funciona.
A estrutura do aplicativo repete o aplicativo HelloWorld anterior. Três blocos de software interagem no aplicativo: no lado do navegador, código Java Script, no aplicativo Web Spring-Boot do lado do servidor que controla o Kurento Media Server. Esses blocos de programa trocam mensagens entre si com base no protocolo Json.

O diagrama mostra que, no KMS, o bloco do programa WebRtcEndpoint não envolve mais a transmissão do sinal multimídia para recepção, mas passa-o primeiro pelo FaceOverlayFilter, que determina a presença de um rosto na imagem.
A troca de sinal entre os blocos do programa é aproximadamente a mesma do aplicativo HelloWorld.

As principais ações do aplicativo são executadas quando você clica no botão "Iniciar". É criado um MediaPipeline, por meio do qual o tráfego de mídia será transmitido, os elementos de mídia WebRtcEndpoint e FaceOverlayFilter são criados, uma conexão entre eles é criada.
Aqui está uma sequência simplificada de instruções que forma uma cadeia de blocos de programas para um determinado aplicativo.
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 o seguinte aplicativo do tutorial do Kurento chamado RTP Receiver.
Se não for iniciado, inicie o Kurento Media Server
sudo service kurento-media-server start
Se você já clonou o tutorial Java do Kurento, não execute o seguinte comando:
git clone https://github.com/Kurento/kurento-tutorial-java.git
Vá para o diretório do projeto
cd kurento-tutorial-java/kurento-rtp-receiver
Nós compilamos o projeto pela equipe Maven
mvn compile exec:java
ou, como no meu caso, vamos começar da idéia.
No navegador Firefox, acesse https: // localhost: 8443 /
na janela que se abre, clique no botão "Iniciar"

Na janela de informações da conexão KMS, são exibidos dados para configurar o comando do Gstreamer: áudio, porta de vídeo, endereço IP. Esses dados, bem como o caminho para o arquivo, devem ser especificados no 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'
A propósito, verifique se você tem o Gstreamer instalado
gst-launch-1.0 —gst-version
Emoldurando as portas e outras coisas, no console, eles lançaram o comando Gstreamer-a.
Agora, atenção está jogando na loteria. Não sei se o seu arquivo será ou não reproduzido. Da minha pobre coleção de clipes, os arquivos com a extensão * .mpg começaram a ser reproduzidos

Aqui, o clipe de Natalia Mogilevskaya é reproduzido. Os clipes com uma extensão diferente não são reproduzidos ou são reproduzidos com som distorcido.
A partir dessa experiência, concluímos: nem todos os iogurtes são igualmente úteis.
Vamos analisar o funcionamento desta aplicação. Primeiro, um Pipeline de mídia é criado para transmitir o tráfego de mídia, assim como o RtpEndpoint e o WebRtcEndpoint, o último executa o trabalho do receptor de pacotes RTP e é usado para exibir um videoclipe.
Aqui está uma sequência simplificada de instruções para esta parte do aplicativo Java:
final MediaPipeline pipeline = kurento.createMediaPipeline(); final RtpEndpoint rtpEp = makeRtpEndpoint(pipeline, useSrtp); final WebRtcEndpoint webRtcEp = new WebRtcEndpoint.Builder(pipeline).build(); rtpEp.connect(webRtcEp);
Isso conclui a revisão desta parte do tutorial do Kurento. Tenha uma boa programação!
KurentoTutorial do KurentoArtigo anterior