خدمات Java و Spring و Kurento والإعلام. الجزء 2


في مقالة سابقة ، وصفت تجربتي مع تطبيق HelloWorld من برنامج Kurento التعليمي. في هذه المقالة ، سأستمر في مراجعة تطبيقات الويب في Java Spring و Kurento Media Server-a.

يسمى التطبيق التالي في البرنامج التعليمي WebRTC Magic Mirror. من الاسم يتبع أن المرآة تعكس حقيقة مزينة قليلاً. في هذا التطبيق ، بالإضافة إلى التطبيق السابق ، يتم استخدام مرشح رؤية الكمبيوتر FaceOverlay. عندما يتم اكتشاف وجه بشري في الكاميرا ، يضع Kurento Media Server رأسًا سوبر ماريو على رأسه. إذا كان هناك عدّة وجوه في العدسة ، يرتدي الجميع غطاء.

إطلاق خادم الوسائط كورينتو

sudo service kurento-media-server start 

إذا كنت قد قمت بالفعل باستنساخ البرنامج التعليمي Kurento Java ، فلا تقم بتشغيل الأمر التالي:

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

انتقل إلى دليل المشروع

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

نقوم بتجميع المشروع بواسطة فريق Maven

 mvn compile exec:java 

أو ، كما في حالتي ، لنبدأ من الفكرة.

في متصفح Firefox ، انتقل إلى https: // localhost: 8443 /

في النافذة التي تفتح ، انقر فوق الزر "ابدأ" ، سترى صورة:

الصورة
من هذه التجربة نستنتج: أن وجه قطتي لا يبدو كإنسان على الإطلاق ، لذلك ليس من المفترض أن يكون غطاء Super Mario له.

دعونا نرى كيف يعمل هذا المثال.

تكرر بنية التطبيق تطبيق HelloWorld السابق. تتفاعل ثلاث كتل برمجية في التطبيق: على جانب المتصفح ، كود Java Script ، على تطبيق Spring-Boot Web من جانب الخادم والذي يتحكم في Kurento Media Server. تقوم كتل البرنامج هذه بتبادل الرسائل مع بعضها البعض بناءً على بروتوكول Json.

الصورة

يوضح الرسم التخطيطي أنه في KMS ، لم تعد كتلة برنامج WebRtcEndpoint تلتف من إرسال إشارة الوسائط المتعددة للاستقبال ، لكنها تمر أولاً عبر FaceOverlayFilter ، الذي يحدد وجود وجه في الصورة.

تبادل إشارة بين كتل البرنامج هو نفسه تقريبا كما هو الحال في تطبيق HelloWorld.

الصورة

يتم تنفيذ الإجراءات الرئيسية في التطبيق عند النقر فوق الزر "ابدأ". يتم إنشاء MediaPipeline ، يتم من خلاله نقل حركة مرور الوسائط ، وإنشاء عناصر وسائط WebRtcEndpoint و FaceOverlayFilter ، ويتم إنشاء اتصال بينهما.

فيما يلي تسلسل مبسط للبيانات التي تشكل سلسلة من كتل البرامج لتطبيق معين.

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

النظر في التطبيق التالي من البرنامج التعليمي Kurento دعا RTP Receiver.

إذا لم يتم البدء ، فابدأ تشغيل Kurento Media Server

 sudo service kurento-media-server start 

إذا كنت قد قمت بالفعل باستنساخ البرنامج التعليمي Kurento Java ، فلا تقم بتشغيل الأمر التالي:

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

انتقل إلى دليل المشروع

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

نقوم بتجميع المشروع بواسطة فريق Maven

 mvn compile exec:java 

أو ، كما في حالتي ، لنبدأ من الفكرة.

في متصفح Firefox ، انتقل إلى https: // localhost: 8443 /

في النافذة التي تفتح ، انقر على زر "ابدأ"

الصورة

في نافذة معلومات اتصال KMS ، تظهر البيانات لتكوين أمر Gstreamer: الصوت ، منفذ الفيديو ، عنوان IP. يجب تحديد هذه البيانات ، وكذلك مسار الملف ، في الأمر.

 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' 

بالمناسبة ، تحقق من تثبيت Gstreamer

 gst-launch-1.0 —gst-version 

تأطير الموانئ والاشياء ، في وحدة التحكم أطلقوا الأمر Gstreamer-

الآن ، الاهتمام يلعب اليانصيب. لا أعرف ما إذا كان سيتم تشغيل ملفك أم لا. من مجموعة مقاطع الفيديو الضعيفة إلى حد ما ، بدأت تشغيل الملفات ذات الملحق * .mpg

الصورة

هنا ، يتم لعب مقطع ناتاليا موغيليفسكايا. مقاطع ذات امتداد مختلف إما لا تلعب ، أو تلعب مع صوت مشوه.

من هذه التجربة نستنتج: ليس كل اللبن مفيد بنفس القدر.

سنقوم بتحليل تشغيل هذا التطبيق. أولاً ، يتم إنشاء Media Pipeline لنقل حركة مرور الوسائط ، وكذلك RtpEndpoint و WebRtcEndpoint ، ويقوم الأخير بعمل مستقبِل حزم RTP ويستخدم لعرض مقطع فيديو.

إليك تسلسل عبارات مبسط لهذا الجزء من تطبيق Java:

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

بهذا تنتهي مراجعة هذا الجزء من برنامج Kurento التعليمي. هل لديك برمجة لطيفة!

كورينتو
كورينتو تعليمي
المادة السابقة

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


All Articles