Layanan Java, Spring, Kurento dan media. Bagian 2


Dalam artikel sebelumnya, saya menggambarkan percobaan saya dengan aplikasi HelloWorld dari tutorial Kurento. Pada artikel ini, saya akan terus meninjau aplikasi Web di Java Spring dan Kurento Media Server-a.

Aplikasi selanjutnya dalam tutorial ini disebut WebRTC Magic Mirror. Dari namanya, cermin mencerminkan realitas yang sedikit diperindah. Dalam aplikasi ini, selain yang sebelumnya, filter visi komputer menggunakan filter FaceOverlay. Ketika wajah manusia terdeteksi di kamera, Server Media Kurento "menempatkan" topi Super Mario di kepalanya. Jika ada beberapa wajah di lensa, semua orang memakai topi.

Luncurkan Kurento Media Server

sudo service kurento-media-server start 

Jika Anda sudah mengkloning tutorial Kurento Java, jangan jalankan perintah berikut:

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

Pergi ke direktori proyek

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

Kami menyusun proyek oleh tim Maven

 mvn compile exec:java 

Atau, seperti dalam kasus saya, mari kita mulai dari Ide.

Di peramban Firefox, buka https: // localhost: 8443 /

Di jendela yang terbuka, klik tombol "Start", Anda akan melihat gambar:

gambar
Dari pengalaman ini kami menyimpulkan: wajah kucing saya tidak terlihat seperti manusia sama sekali, jadi topi Super Mario tidak seharusnya untuknya.

Mari kita lihat bagaimana contoh ini bekerja.

Struktur aplikasi mengulangi aplikasi HelloWorld sebelumnya. Tiga blok perangkat lunak berinteraksi dalam aplikasi: di sisi browser, kode Java Script, di sisi server aplikasi Web Spring-Boot yang mengontrol Kurento Media Server. Program-program ini memblokir saling bertukar pesan berdasarkan protokol Json.

gambar

Diagram menunjukkan bahwa dalam KMS blok program WebRtcEndpoint tidak lagi membungkus transmisi sinyal multimedia untuk penerimaan, tetapi pertama-tama melewati itu melalui FaceOverlayFilter, yang menentukan keberadaan wajah dalam gambar.

Pertukaran sinyal antara blok program kira-kira sama dengan di aplikasi HelloWorld.

gambar

Tindakan utama dalam aplikasi dilakukan ketika Anda mengklik tombol "Start". MediaPipeline dibuat, di mana lalu lintas media akan ditransmisikan, elemen media WebRtcEndpoint dan FaceOverlayFilter dibuat, koneksi di antara mereka dibuat.

Berikut ini adalah urutan pernyataan yang disederhanakan yang membentuk rantai blok program untuk aplikasi yang diberikan.

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

Pertimbangkan aplikasi berikut dari tutorial Kurento yang disebut RTP Receiver.

Jika belum dimulai, mulai Kurento Media Server

 sudo service kurento-media-server start 

Jika Anda sudah mengkloning tutorial Kurento Java, jangan jalankan perintah berikut:

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

Pergi ke direktori proyek

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

Kami menyusun proyek oleh tim Maven

 mvn compile exec:java 

atau, seperti dalam kasus saya, mari kita mulai dari Ide.

Di peramban Firefox, buka https: // localhost: 8443 /

di jendela yang terbuka, klik tombol "Start"

gambar

Di jendela info koneksi KMS, data muncul untuk mengkonfigurasi perintah untuk Gstreamer: audio, port video, alamat IP. Data ini, serta jalur ke file, harus ditentukan dalam perintah.

 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' 

Omong-omong, periksa apakah Anda sudah menginstal Gstreamer

 gst-launch-1.0 β€”gst-version 

Membingkai port dan lainnya, di konsol mereka meluncurkan perintah Gstreamer-a.

Sekarang, perhatian sedang bermain lotre. Saya tidak tahu apakah file Anda akan diputar atau tidak. Dari koleksi klip saya yang agak buruk, file dengan ekstensi * .mpg mulai diputar

gambar

Di sini, klip Natalia Mogilevskaya diputar. Klip dengan ekstensi yang berbeda tidak dapat diputar, atau diputar dengan suara yang terdistorsi.

Dari pengalaman ini kami menyimpulkan: tidak semua yogurt sama bermanfaatnya.

Kami akan menganalisis pengoperasian aplikasi ini. Pertama, Media Pipeline dibuat untuk mengirimkan lalu lintas media, serta RtpEndpoint dan WebRtcEndpoint, yang terakhir melakukan pekerjaan penerima paket RTP dan digunakan untuk menampilkan klip video.

Berikut urutan pernyataan yang disederhanakan untuk bagian aplikasi Java ini:

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

Ini menyimpulkan ulasan bagian tutorial Kurento ini. Punya pemrograman yang bagus!

Kurento
Tutorial Kurento
Artikel sebelumnya

Source: https://habr.com/ru/post/id435922/


All Articles