
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:

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.

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.

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"

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

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!
KurentoTutorial KurentoArtikel sebelumnya