البث المباشر للفيديو الاستريو إلى نظارات الواقع الافتراضي (Oculus Go)

لن نقوم بجزء تمهيدي مطول ، وسوف نذهب مباشرة إلى هذه النقطة.

لذلك ، هناك كاميرا استريو يمكنها توصيل فيديو H264 عبر بروتوكولات مختلفة. هناك نظارات Oculus العودة. كيف يمكنك مشاهدة بث مباشر استريو من كاميرا في نظارات الواقع الافتراضي؟ من المستحسن ، مع الحد الأدنى من التأخير والمحلي ، بحيث تختفي Youtube وخدمات الفيديو RTMP الأخرى.

في المستقبل ، هذا ما حدث. في البداية - تشغيل ملف فيديو مسجل مسبقًا من جهاز استريو ، ثم تشغيل دفق مباشر باستخدام StereoPi (MPEG-TS عبر UDP).


الكاميرا المجسمة التي أستخدمها هي StereoPi ، لذلك سأقدم أمثلة محددة فيما يتعلق بها. في الواقع ، هذا هو التوت العادي ، ولكن مع اثنين من الكاميرات ، لذلك يمكن تجربة الأمثلة المذكورة على التوت العادي ، إذا كنت تريد حقا. صحيح ، سوف تحتاج إلى تثبيت البرامج الثابتة من StereoPi.
أول شيء كان محاولة لجعل تطبيق Android منتظم يقوم بتشغيل البث من الكاميرا إلى وضع ملء الشاشة ، وتعبئته في oculus باستخدام طريقة التحميل الجانبي (عبر adb).

بعد اختيار بعض مع البيان ، وافقت النظارات على النظر في هذا التطبيق الأصلي. ظهرت في "مصادر غير معروفة" في المكتبة ، التي بدأت ، وأظهرت كل ما هو مطلوب ، ولكن كانت هناك مشكلة - لم تؤخذ حركات الرأس في الاعتبار ، تم عرض الفيديو من الكاميرا ببساطة بغباء في كامل الشاشة مع النظارات. كان تأثير الاستريو ، نعم ، ولكن بمجرد تحريك رأسي قليلاً ، بدأ سكان موسكو في الهوس ، مما تسبب في إحساسات غير مريحة للغاية.

إذا كان الأمر كذلك ، فإليك تطبيق .apk: StereoPi لـ Oculus Go وفي الوقت نفسه في الأرشيف والأكاذيب ، يمكنك محاولة ملء النظارات على الفور. مجرد أمر

adb install StereoPi.apk 

بعد ذلك ، انتقل إلى المكتبة -> مصادر غير معروفة ، يجب أن يظهر التطبيق com.virt2real.stereopi هناك



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

ولكن هذا هو القمامة ... أريد تطبيق أصلي طبيعي للعين لمشاهدة الفيديو. بحيث كانت هناك شاشة بلا حراك وحتى لا تتعرض للعنف عند تحريك رأسك. لست مستعدًا لتعلم Unity for oculus حتى الآن ، لذلك حصلت على فكرة لمحاولة استخدام تطبيقات مشغل الفيديو الموجود بالفعل في متجر Oculus. عادةً ما أشاهد الأفلام ثلاثية الأبعاد في Skybox ، لذلك حاولت استخدامها.

بالإضافة إلى العرض المعتاد لملفات الوسائط من محرك الأقراص المحمول المدمج ومن أجهزة الشبكة ، تم العثور على عنصر "Airscreen" المثير للاهتمام في Skybox. اتضح أنه يمكنك تثبيت تطبيق Skybox على جهاز كمبيوتر يعمل بنظام Windows (جيدًا ، أو على جهاز Mac) ، وإطعام ملفات الفيديو الخاصة به ، ثم يصبح من الممكن مشاهدة ملفات الفيديو هذه بنظارات. أي تطبيق ويندوز هو خادم الفيديو ، والنظارات - عميل. لم أجد بروتوكول الاتصال في أي مكان ، لذلك اضطررت للكشف عن tcpdump.

بعد حفر قصير ، تبين أن Skybox يستخدم رسائل البث UDP للبحث عن خادم في الشبكة المحلية. تبدو الرسالة مثل هذا:

 {"command":"search","project":"direwolf","deviceId":"66a86b57-b292-3957-9fc9-4041d5e1f841","deviceType":"vr","udpPort":"6881"} 


جميع الرسائل في JSON مريحة للغاية.

في هذه الرسالة ، نحتاج إلى إرسال استجابة إلى مضيف المرسل والمنفذ المحدد في الرسالة ، أي 6881

 {"udp":true,"project":"direwolf server","command":"searchResult","deviceId":"66a86b57-b292-3957-9fc9-4041d5e1f841","computerId":"53709de962eba2f9695c8a926562486c","computerName":"STEREO-PI","ip":"192.168.1.51","ips":["192.168.1.51"],"port":6888} 

نوضح هنا مضيفنا ومنفذنا الذي يعمل عليه خادم WebSockets. جميع الاتصالات سوف تمر عبر websockets.

على سبيل المثال ، ستكون الرسالة الأولى عبر مآخذ الويب مثل هذا:

 {"command":"addDevice","deviceId":"66a86b57-b292-3957-9fc9-4041d5e1f841","deviceName":"Oculus Pacific","deviceType":"vr","showLoginCode":true} 

نرد عليه:

 {"command":"addDevice","deviceId":"66a86b57-b292-3957-9fc9-4041d5e1f841","deviceName":"Oculus Pacific","deviceType":"vr","showLoginCode":true} 

وبعد ذلك ، في Skybox مع النظارات سنرى لدينا StereoPi. التالي سيكون مجموعة من الطلبات التي تحتاج إلى إرسال الإجابات. محتوى قائمة التشغيل ، على سبيل المثال.

مثال قائمة التشغيل لـ Skybox
[{id: 'livestream-rtsp' ،
اسم: "بث مباشر RTSP" ،
المدة: 0
الحجم: 0 ،
عنوان url: 'rtsp: //192.168.1.51: 554 / h264' ،
الصورة المصغرة: 'http://192.168.1.51/thumbnail/livestream.png' ،
الصورة المصغرة: 186 ،
thumbnail الارتفاع: 120 ،
last تم التعديل: 1 ،
defaultVR الإعداد: 1 ،
userVRSetting: 2 ،
العرض: 1280 ،
الارتفاع: 720 ،
orientDegree: '0' ،
ترجمات: [] ،
ratioTypeFor2DScreen: 'افتراضي' ،
rotationFor2DScreen: 0 ،
موجود: صحيح
isBadMedia: false ،
وأضاف تايم: 1} ،
{id: 'livestream-mpegts' ،
الاسم: "البث المباشر MPEG-TS" ،
المدة: 0
الحجم: 0 ،
عنوان url: 'udp: // @: 3001' ،
الصورة المصغرة: 'http://192.168.1.51/thumbnail/livestream.png' ،
الصورة المصغرة: 186 ،
thumbnail الارتفاع: 120 ،
last تم التعديل: 1 ،
defaultVR الإعداد: 1 ،
userVRSetting: 2 ،
العرض: 1280 ،
الارتفاع: 720 ،
orientDegree: '0' ،
ترجمات: [] ،
ratioTypeFor2DScreen: 'افتراضي' ،
rotationFor2DScreen: 0 ،
موجود: صحيح
isBadMedia: false ،
وأضاف تايم: 1}]

هذا مثير للاهتمام خاصة منذ ذلك الحين في قائمة التشغيل التي تشكل تطبيق Windows ، تم اكتشاف الاختصار المطلوب RTSP. اتضح أن تطبيق الخادم يعمل على دفق ملفات الفيديو من خلال RTSP ، والذي يعد مناسبًا بالفعل لبث الفيديو المباشر ، والذي نحتاج إليه بالطبع. بتعبير أدق ، اتضح أن هناك "RTSP" في قائمة التشغيل ، لكن الروابط إلى ملفات الفيديو هي http http منتظمة. أي لا يزال تطبيق الخادم يرسل الملفات عبر HTTP ، لكن هذا لا يناسبنا. في هذه المرحلة ، كنت غاضبًا بالفعل ، لكنني اعتقدت ، لماذا لا أحاول إعطاء رابط في قائمة التشغيل بتنسيق يفهمه VLC عادة ، أي rtsp: //192.168.1.51: 554 / h264 والهتافات ، بدأ Skybox في تشغيل دفق الفيديو من خادم RTSP على الاستريو. التأخير كبير للغاية ، 20 ثانية ، لذلك انتقاء. نحن نحاول تغذية دفق UDP إلى MPEG-TS. مرة أخرى ، عادةً ما يأكل VLC هذا باستخدام الرابط udp: // @: 3001 ، بالنسبة إلى Skybox حاولت تحديد الطريقة نفسها. ثم يبقى فقط لتوجيه دفق MPEG-TS إلى مجموعة النظارات ومنفذ UDP المحدد. تشارك GStreamer في هذا:

 raspivid -3d sbs -w 1280 -h 720 -o - | gst-launch-1.0 -q fdsrc ! h264parse ! mpegtsmux alignment=7 name=muxer ! rndbuffersize max=1316 min=1316 ! multiudpsink clients="192.168.1.60:3001" sync=false 

في صندوق السماء ، نضغط على عنصر قائمة التشغيل "Live Stream MPEG-TS" وفويلا ، ونرى دفق MPEG-TS مباشر على الشاشة الكبيرة في سينما افتراضية. التأخير أقل بكثير من RTSP ، 2-3 ثواني ، ولكن لا يزال أكثر بكثير مما في تطبيقي البسيط الذي يتلقى دفق H264 خام عبر UDP (عادة ما يكون هناك تأخير 100-150 مللي ثانية بدقة 720p).

ثم وصلت إلى طريق مسدود ، حتى الآن لم تنجح في الحد من التأخير. ربما تحتاج إلى تعطيل التخزين المؤقت في Skybox نفسه ، سأحاول الكتابة إلى المطورين ، وربما سيضعون خيار "تعطيل التخزين المؤقت" :-)

في الختام


بشكل عام ، إذا كنت بحاجة مفاجئة لسبب ما فجأة لمشاهدة بث فيديو مباشر في oculi أو نظارات VR الأخرى (Skybox متاح في العديد من المنصات مثل) - يمكنك تجربة الطريقة التي وصفتها. لا أعرف ما إذا كان هذا سيعمل مع كاميرات الاستريو الأخرى ، ولكن مع استريو ستيربي تم التحقق منه ، فإنه يحرث.

مراجع


مصدر الخادم ل skybox
منتدى الموضوع مع المناقشة

شكرا لكم جميعا ، كل شخص حر.

أوه نعم ، لقد نسيت تقريبا. إذا تمكن شخص ما فجأة من المساعدة في التطبيق الأصلي للعين (بحيث يبدو وكأنه Skybox) - اكتب في رسالة شخصية ، سنناقش التفاصيل.

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


All Articles