WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان

WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
هڪ خدمت جي طور تي سافٽ ويئر، هڪ خدمت جي طور تي انفراسٽرڪچر، هڪ خدمت جي طور تي پليٽ فارم، هڪ خدمت جي طور تي ڪميونيڪيشن پليٽ فارم، هڪ خدمت جي طور تي وڊيو ڪانفرنس، هڪ خدمت جي طور تي ڪلائوڊ گيمنگ بابت ڇا؟ هتي اڳ ۾ ئي ڪلائوڊ گيمنگ (Cloud Gaming) ٺاهڻ لاءِ ڪيتريون ئي ڪوششون ڪيون ويون آهن، جهڙوڪ اسٽيڊيا، تازو ئي گوگل پاران شروع ڪيو ويو آهي. اسٽيڊيا WebRTC لاءِ نئون ناهي، پر ڇا ٻيا به ساڳيءَ طرح WebRTC استعمال ڪري سگھن ٿا؟

Thanh Nguyen هن موقعي کي پنهنجي اوپن سورس پروجيڪٽ CloudRetro تي جانچڻ جو فيصلو ڪيو. CloudRetro Pion تي ٻڌل آهي، مشهور WebRTC لائبريري Go جي بنياد تي (شڪريو ڏيکاريل Pion ڊولپمينٽ ٽيم کان هن مضمون کي تيار ڪرڻ ۾ انهن جي مدد لاء). هن آرٽيڪل ۾، ٿان پنهنجي پروجيڪٽ جي فن تعمير جو هڪ جائزو پيش ڪري ٿو، ۽ انهي بابت پڻ ڳالهائيندو آهي ته هن ڪهڙي مفيد شيون سکيون آهن ۽ هن جي ڪم دوران هن کي ڪهڙيون چيلينجون پيش آيون.

جائز آهي

گذريل سال، جڏهن گوگل اسٽاڊيا جو اعلان ڪيو، اهو منهنجي ذهن کي اڏايو. اهو خيال ايترو منفرد ۽ جديد آهي جو مان مسلسل حيران ٿي ويس ته موجوده ٽيڪنالاجي سان اهو ڪيئن ممڪن آهي. هن موضوع کي بهتر سمجهڻ جي خواهش مون کي هڪ اوپن سورس ڪلائوڊ گيم جو پنهنجو ورزن ٺاهڻ لاءِ چيو. نتيجو صرف شاندار هو. هيٺ آئون پنهنجي سال تي ڪم ڪرڻ جي عمل کي حصيداري ڪرڻ چاهيندس پروجيڪٽ.

TLDR: مختصر سلائڊ ورزن نمايانن سان

ڇو ڪلائوڊ گيمنگ مستقبل آهي

مان سمجهان ٿو ته ڪلائوڊ گيمنگ جلد ئي نه رڳو گيمنگ جي ايندڙ نسل بڻجي ويندي، پر ڪمپيوٽر سائنس جي ٻين شعبن ۾ پڻ. ڪلائوڊ گيمنگ ڪلائنٽ/سرور ماڊل جي چوٽي آهي. هي ماڊل پس منظر جي انتظام کي وڌائي ٿو ۽ ريموٽ سرور تي گيم منطق کي ميزباني ڪندي ۽ ڪلائنٽ ڏانهن تصويرون/آڊيو اسٽريمنگ ڪندي فرنٽ اينڊ ڪم کي گھٽ ڪري ٿو. سرور بھاري پروسيسنگ ڪندو آھي تنھنڪري ڪلائنٽ ھاڻي هارڊويئر جي حدن جي رحم ڪرم تي نه آھي.

گوگل اسٽيڊيا بنيادي طور تي توهان کي راند ڪرڻ جي اجازت ڏئي ٿي AAA رانديون (يعني اعليٰ درجي جون بلاڪ بسٽر رانديون) يوٽيوب وانگر انٽرفيس تي. ساڳيو طريقو ٻين بھاري آف لائن ايپليڪيشنن تي لاڳو ٿي سگھي ٿو جهڙوڪ آپريٽنگ سسٽم يا 2D/3D گرافڪ ڊيزائن وغيره. انهي ڪري ته اسان انهن کي مسلسل هلائي سگهون ٿا گهٽ اسپيڪ ڊوائيسز تي ڪيترن ئي پليٽ فارمن تي.

WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
هن ٽيڪنالاجي جو مستقبل: تصور ڪريو ته Microsoft Windows 10 Chrome برائوزر تي هليو ويو؟

ڪلائوڊ گيمنگ ٽيڪنالاجي طور مشڪل آهي

گيمنگ انهن ناياب علائقن مان هڪ آهي جتي مسلسل، تيز صارف جو جواب گهربل آهي. جيڪڏهن ڪڏهن ڪڏهن هڪ صفحي تي ڪلڪ ڪرڻ وقت اسان کي 2 سيڪنڊن جي دير سان منهن ڏيڻو پوي ٿو، اهو قابل قبول آهي. لائيو وڊيو اسٽريمز ڪجھ سيڪنڊن ۾ دير ڪرڻ لڳن ٿا، پر اڃا تائين مناسب استعمال جي صلاحيت پيش ڪن ٿا. بهرحال، جيڪڏهن راند اڪثر ڪري 500ms جي ڪري رهي ٿي، اهو صرف ناقابل آهي. اسان جو مقصد انتهائي گھٽ ويڪرائي حاصل ڪرڻ آهي ته جيئن ان پٽ ۽ ميڊيا جي وچ ۾ خال جيترو ٿي سگهي ننڍو هجي. تنهن ڪري، وڊيو اسٽريمنگ لاء روايتي طريقو هتي لاڳو ناهي.

WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
جنرل Cloud Game Template

اوپن سورس پروجيڪٽ CloudRetro

مون فيصلو ڪيو ته هڪ ڪلائوڊ گيم جو ٽيسٽ نمونو ٺاهيو ته ڏسو ته ڇا اهو سڀ ممڪن آهي اهڙي تنگ نيٽ ورڪ پابندين سان. مون تصور جي ثبوت لاءِ گولانگ کي چونڊيو ڇاڪاڻ ته اها اها ٻولي هئي جنهن سان مان تمام گهڻو واقف هوس ۽ ٻين ڪيترن ئي سببن جي ڪري هن عمل جي لاءِ مناسب هئي، جيئن مون بعد ۾ دريافت ڪيو. وڃ سادو آهي ۽ تمام جلدي ترقي ڪري ٿو؛ گو ۾ چينل ملٽي ٿريڊنگ کي منظم ڪرڻ لاءِ بهترين آهن.

پروجيڪٽ CloudRetro.io ريٽرو گيمنگ لاءِ هڪ اوپن سورس ڪلائوڊ گيمنگ سروس آهي. پروجيڪٽ جو مقصد روايتي ريٽرو گيمز ۾ سڀ کان وڌيڪ آرامده گيمنگ تجربو آڻڻ ۽ ملٽي پليئر شامل ڪرڻ آهي.
توهان هتي پروجيڪٽ بابت وڌيڪ سکو سگهو ٿا: https://github.com/giongto35/cloud-game.

CloudRetro ڪارڪردگي

CloudRetro ڪلائوڊ گيمنگ جي طاقت کي ظاهر ڪرڻ لاءِ ريٽرو رانديون استعمال ڪري ٿو. جيڪو توهان کي ڪيترن ئي منفرد گیمنگ تجربو حاصل ڪرڻ جي اجازت ڏئي ٿو.

  • راند جي پورائيزيشن
    • صفحي کي کولڻ وقت فوري پلے بیک؛ ڪابه ڊائون لوڊ يا انسٽاليشن جي ضرورت ناهي
    • موبائل برائوزر ۾ ڪم ڪري ٿو، تنهنڪري ان کي هلائڻ لاءِ ڪنهن سافٽ ويئر جي ضرورت ناهي

  • گيم سيشن ڪيترن ئي ڊوائيسن تي شيئر ڪري سگھجن ٿا ۽ ايندڙ وقت لاءِ ڪلائوڊ ۾ محفوظ ٿي سگھن ٿا
  • راند کي هلائي سگهجي ٿو، يا اهو هڪ ئي وقت ڪيترن ئي صارفين طرفان کيڏي سگهجي ٿو:
    • TwitchPlayPokemon وانگر Crowdplay، صرف وڌيڪ ڪراس پليٽ فارم ۽ وڌيڪ حقيقي وقت
    • آف لائن رانديون آن لائن. ڪيترائي استعمال ڪندڙ بغير نيٽ ورڪ سيٽنگ ڪري سگھن ٿا. Samurai Shodown هاڻي CloudRetro نيٽ ورڪ تي 2 رانديگرن پاران کيڏي سگھجي ٿو

    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    مختلف ڊوائيسز تي آن لائن multiplayer راند جو ڊيمو نسخو

    انفراسٹرڪچر

    گهرجن ۽ ٽيڪنالاجي اسٽيڪ

    هيٺ ڏنل ضرورتن جي هڪ فهرست آهي جيڪا مون منصوبي کي شروع ڪرڻ کان پهريان مقرر ڪئي آهي.

    1. هڪ رانديگر
    اها گهرج هتي تمام اهم يا واضح نه لڳي سگهي ٿي، پر اها منهنجي اهم ڳالهين مان هڪ آهي، اها ڪلائوڊ گيمنگ کي اجازت ڏئي ٿي جيترو ٿي سگهي روايتي اسٽريمنگ سروسز کان پري رهڻ جي. جيڪڏهن اسان هڪ واحد پليئر راند تي ڌيان ڏيون ٿا، اسان هڪ مرڪزي سرور يا سي ڊي اين کان نجات حاصل ڪري سگهون ٿا ڇو ته اسان کي عوام ڏانهن وهڻ جي ضرورت ناهي. سنڪ سرور تي اسٽريمز کي اپلوڊ ڪرڻ يا سينٽرلائيزڊ ويب ساکٽ سرور تي پيڪٽس موڪلڻ بدران، سروس اسٽريمز سڌو سنئون صارف کي پيئر-ٽو-پيئر WebRTC ڪنيڪشن ذريعي پهچائي رهيا آهن.

    2. گھٽ ويڪرائي ميڊيا وهڪرو
    اسٽيڊيا جي باري ۾ پڙهڻ، مان اڪثر ڏسان ٿو WebRTC جو ذڪر ڪجهه مضمونن ۾. مون محسوس ڪيو ته WebRTC هڪ شاندار ٽيڪنالاجي آهي ۽ ڪلائوڊ گيمنگ ۾ استعمال لاءِ ڀرپور آهي. WebRTC ھڪڙو پروجيڪٽ آھي جيڪو ويب برائوزر ۽ موبائل ايپليڪيشنون مهيا ڪري ٿو حقيقي وقت جي رابطي سان ھڪڙي سادي API ذريعي. اهو پيئر-ٽو-پيئر ڪنيڪشن فراهم ڪري ٿو، ميڊيا لاءِ بهتر ڪيو ويو آهي، ۽ معياري ڪوڊيڪس بلٽ ان آهن جهڙوڪ VP8 ۽ H264.

    مون اعليٰ معيار جي گرافڪس کي برقرار رکڻ تي بهترين ممڪن صارف تجربو کي يقيني بڻائڻ کي ترجيح ڏني. الورورٿم ۾ ڪجهه نقصان قابل قبول آهن. گوگل اسٽيڊيا وٽ سرور تي تصوير جي سائيز کي گھٽائڻ جو هڪ اضافي قدم آهي، ۽ فريم کي اعليٰ معيار تائين وڌايو ويندو آهي ان کان اڳ ۾ ته ساٿين ڏانهن منتقل ڪيو وڃي.

    3. جغرافيائي رستي سان ورهايل زيربنا
    ڪو مسئلو ناهي ته ڪمپريشن الگورٿم ۽ ڪوڊ کي ڪيئن بهتر بڻايو ويو آهي، نيٽ ورڪ اڃا تائين فيصلو ڪندڙ عنصر آهي جيڪو دير سان تمام گهڻي مدد ڪري ٿو. آرڪيٽيڪچر کي استعمال ڪندڙ جي ويجھي سرور کي ڳنڍڻ لاءِ هڪ ميکانيزم هجڻ گهرجي ته جيئن گول ٽرپ ٽائيم (RTT) کي گھٽائي سگهجي. فن تعمير کي لازمي طور تي 1 ڪوآرڊينيٽر ۽ ڪيترن ئي اسٽريمنگ سرورز کي سڄي دنيا ۾ ورهايو ويو آهي: يو ايس ويسٽ، يو ايس ايسٽ، يورپ، سنگاپور، چين. سڀني اسٽريمنگ سرورز کي مڪمل طور تي الڳ ڪيو وڃي. سسٽم ان جي ورڇ کي ترتيب ڏئي سگھي ٿو جڏهن سرور شامل ٿئي ٿو يا نيٽ ورڪ ڇڏي ٿو. ان ڪري، وڏي ٽرئفڪ سان، اضافي سرور شامل ڪرڻ افقي اسڪيلنگ جي اجازت ڏئي ٿو.

    4. برائوزر مطابقت
    ڪلائوڊ گيمنگ تمام بهترين آهي جڏهن ان کي استعمال ڪندڙن کان گهٽ ۾ گهٽ گهربل هجي. ان جو مطلب اهو آهي ته اهو ممڪن آهي برائوزر ۾ هلائڻ. برائوزر استعمال ڪندڙن لاءِ گیمنگ تجربو کي جيترو ممڪن ٿي سگھي آرامده بڻائڻ ۾ مدد ڪن ٿا، انھن کي سافٽ ويئر ۽ هارڊويئر انسٽال ڪرڻ کان بچائي ٿو. برائوزر موبائل ۽ ڊيسڪ ٽاپ ورزن جي وچ ۾ ڪراس پليٽ فارم ڪارڪردگي مهيا ڪرڻ ۾ پڻ مدد ڪن ٿا. خوشقسمتيءَ سان، WebRTC چڱيءَ طرح سهائتا ٿيل آهي مختلف برائوزرن تي.

    5. راند جي انٽرفيس ۽ خدمت جي صاف علحدگي
    مان ڪلائوڊ گيمنگ سروس کي پليٽ فارم طور ڏسان ٿو. هر ڪنهن کي پليٽ فارم تي ڪنهن به شيء سان ڳنڍڻ جي قابل هوندو. هاڻي مون کي ضم ڪيو آهي لئبرٽو ڪلائوڊ گيمنگ سروس سان ڇو ته LibRetro ريٽرو گيمز لاءِ هڪ خوبصورت گيم ايموليٽر انٽرفيس پيش ڪري ٿو جهڙوڪ SNES, GBA, PS.

    6. راند سان گڏ ملٽي پليئر، ڪروڊ راند ۽ ٻاهرين ڳنڍڻ (ڊيپ لنڪ) لاءِ ڪمرا
    CloudRetro ڪيترن ئي نئين راندين جي سپورٽ ڪري ٿو جهڙوڪ CrowdPlay ۽ آن لائن ملٽي پليئر ريٽرو گيمز لاءِ. جيڪڏهن ڪيترائي صارف مختلف ڪمپيوٽرن تي ساڳي ڳنڍي لنڪ کوليندا، اهي هڪ ئي راند کي هلندي ڏسندا ۽ ان ۾ شامل ٿيڻ جي قابل به هوندا.

    ان کان علاوه، راند رياستون بادل اسٽوريج ۾ محفوظ ٿيل آهن. هي صارفين کي ڪنهن به وقت ڪنهن ٻئي ڊوائيس تي راند جاري رکڻ جي اجازت ڏئي ٿو.

    7. افقي اسڪيلنگ
    اڄڪلهه ڪنهن به SAAS وانگر، ڪلائوڊ گيمنگ کي افقي طور تي اسپيبلبل هجڻ لاءِ ڊزائين ڪيو وڃي. ڪوآرڊينيٽر-ورڪر ڊيزائن توهان کي وڌيڪ ڪارڪنن کي شامل ڪرڻ جي اجازت ڏئي ٿو وڌيڪ ٽرئفڪ جي خدمت ڪرڻ لاءِ.

    8. ھڪڙي بادل سان ڪو به تعلق نه آھي
    CloudRetro جو انفراسٽرڪچر مختلف ڪلائوڊ فراهم ڪندڙن (ڊجيٽل اوشن، علي بابا، ڪسٽم فراهم ڪندڙ) تي مختلف علائقن لاءِ ميزباني ڪيل آهي. آئون انفراسٽرڪچر لاءِ ڊاڪر ڪنٽينر ۾ هلڻ کي فعال ڪريان ٿو ۽ بيش اسڪرپٽ استعمال ڪندي نيٽ ورڪ سيٽنگون ترتيب ڏيان ٿو هڪ واحد ڪلائوڊ فراهم ڪندڙ ۾ بند ٿيڻ کان بچڻ لاءِ. WebRTC ۾ NAT Traversal سان هن کي گڏ ڪرڻ سان، اسان کي ڪنهن به ڪلائوڊ پليٽ فارم تي ۽ ڪنهن به صارف جي مشين تي به CloudRetro کي ترتيب ڏيڻ جي لچڪ آهي.

    آرڪيٽيڪچرل ڊيزائن

    ڪم ڪندڙ: (يا مٿي ذڪر ڪيل اسٽريمنگ سرور) راندين کي وڌائي ٿو، انڪوڊنگ پائيپ لائين کي هلائي ٿو، ۽ انڪوڊ ٿيل ميڊيا کي استعمال ڪندڙن کي اسٽريم ڪري ٿو. مزدورن جا مثال سڄي دنيا ۾ ورهايل آهن، ۽ هر ڪم ڪندڙ هڪ ئي وقت ڪيترن ئي صارفن جي سيشن کي سنڀاليندو.

    ڪوآرڊينيٽر: نئين استعمال ڪندڙ کي اسٽريمنگ لاءِ سڀ کان وڌيڪ موزون ڪم ڪندڙ سان جوڙڻ جو ذميوار آهي. ڪوآرڊينيٽر WebSocket ذريعي ڪارڪنن سان رابطو ڪري ٿو.

    راند اسٽيٽ اسٽوريج: سڀني راندين جي رياستن لاء مرڪزي ريموٽ اسٽوريج. هي اسٽوريج اهم ڪم مهيا ڪري ٿو جهڙوڪ ريموٽ محفوظ/لوڊ.

    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    CloudRetro جي اعلي سطحي فن تعمير

    ڪسٽم اسڪرپٽ

    جڏهن ڪو نئون استعمال ڪندڙ CloudRetro کوليندو آهي قدم 1 ۽ 2 ۾ هيٺ ڏنل شڪل ۾ ڏيکاريل آهي، ڪوآرڊينيٽر سان گڏ دستياب ڪارڪنن جي فهرست پهرين صفحي تي درخواست ڪئي وئي آهي. ان کان پوء، قدم 3 ۾ ڪلائنٽ سڀني اميدوارن لاء دير جي حساب ڪري ٿو HTTP پنگ درخواست استعمال ڪندي. تاخير جي اها فهرست وري ڪوآرڊينيٽر ڏانهن واپس موڪلي وئي آهي ته جيئن هو صارف جي خدمت لاءِ سڀ کان وڌيڪ مناسب ڪم ڪندڙ جو تعين ڪري سگهي. قدم 4 هيٺ ڏنل راند ٺاهي ٿو. هڪ WebRTC اسٽريمنگ ڪنيڪشن قائم ڪيو ويو آهي صارف ۽ مقرر ڪيل ورڪر جي وچ ۾.
    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    رسائي حاصل ڪرڻ کان پوء استعمال ڪندڙ اسڪرپٽ

    ڪم ڪندڙ جي اندر ڇا آهي

    گيم ۽ اسٽريمنگ پائيپ لائينز ڪم ڪندڙ جي اندر اڪيلائي ۾ محفوظ ٿيل آهن ۽ انٽرفيس ذريعي اتي معلومات مٽائي ٿي. في الحال، هي رابطي ذريعي ياداشت ۾ ڊيٽا کي منتقل ڪندي ڪيو ويندو آهي گولانگ چينل ساڳئي عمل ۾. ايندڙ مقصد علحدگي آهي، يعني. ٻئي عمل ۾ راند جي آزاد لانچ.

    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    ڪم ڪندڙ اجزاء جو تعامل

    مکيه اجزاء:

    • WebRTC: هڪ ڪلائنٽ جزو جيڪو صارف ان پٽ کي قبول ڪري ٿو ۽ سرور مان انڪوڊ ٿيل ميڊيا کي آئوٽ ڪري ٿو.
    • راند ايموليٽر: راند جو حصو. Libretro لائبريري جي مهرباني، سسٽم راند کي ساڳئي عمل جي اندر هلائڻ ۽ اندروني طور ميڊيا ۽ ان پٽ اسٽريم کي مداخلت ڪرڻ جي قابل آهي.
    • راند جي فريم تي قبضو ڪيو ويو آهي ۽ انڪوڊر ڏانهن موڪليو ويو آهي.
    • تصوير/آڊيو انڪوڊر: هڪ انڪوڊنگ پائپ لائن جيڪا ميڊيا فريم وٺي ٿي، انهن کي پس منظر ۾ انڪوڊ ڪري ٿي، ۽ انڪوڊ ٿيل تصويرون/آڊيو آئوٽ ڪري ٿي.

    عمل

    CloudRetro WebRTC تي ڀروسو ڪري ٿو ان جي پسمنظر واري ٽيڪنالاجي جي طور تي، تنهنڪري گولانگ جي عمل درآمد جي تفصيلن تي غور ڪرڻ کان اڳ، مون پاڻ WebRTC بابت ڳالهائڻ جو فيصلو ڪيو. اها حيرت انگيز ٽيڪنالاجي آهي جنهن مون کي ڊيٽا جي اسٽريمنگ لاءِ ذيلي سيڪنڊ ويڪرائي حاصل ڪرڻ ۾ وڏي مدد ڪئي آهي.

    WebRTC

    WebRTC سادي APIs استعمال ڪندي مقامي موبائل ائپس ۽ برائوزرن تي اعليٰ معيار جي پير کان پيئر ڪنيڪشن مهيا ڪرڻ لاءِ ٺهيل آهي.

    NAT ٽرورسل

    WebRTC ان جي NAT ٽرورسل ڪارڪردگي لاءِ سڃاتو وڃي ٿو. WebRTC ٺهيل آهي پير کان پير ڪميونيڪيشن لاءِ. ان جو مقصد اهو آهي ته سڀ کان وڌيڪ مناسب سڌو رستو ڳولڻ، NAT گيٽ ويز ۽ فائر والز کان پاسو ڪرڻ لاءِ پير کان پيئر ڪميونيڪيشن لاءِ هڪ پروسيس ذريعي. ICE. ھن عمل جي حصي جي طور تي، WebRTC APIs STUN سرور استعمال ڪندي توھان جي عوامي IP پتي کي ڳوليندا آھن ۽ ان کي ريلي سرور (ٽرن) جڏهن هڪ سڌي ڪنيڪشن قائم نه ٿي سگهي.

    بهرحال، CloudRetro مڪمل طور تي هن خصوصيت جو استحصال نٿو ڪري. ان جا پير کان پيئر ڪنيڪشن موجود نه آهن صارفين جي وچ ۾، پر صارفين ۽ ڪلائوڊ سرور جي وچ ۾. ماڊل جي سرور واري پاسي عام صارف جي ڊوائيس جي ڀيٽ ۾ گهٽ سڌي رابطي جي پابنديون آهن. هي توهان کي اجازت ڏئي ٿو اڳي کولڻ لاءِ ايندڙ بندرگاهن يا عوامي IP پتي کي سڌو استعمال ڪريو، ڇاڪاڻ ته سرور NAT جي پويان نه آهي.

    اڳي، مون منصوبي کي ڪلائوڊ گيمنگ لاءِ راند ورهائڻ واري پليٽ فارم ۾ تبديل ڪرڻ چاهيو. اهو خيال هو ته راندين جي تخليق ڪندڙن کي راندين ۽ اسٽريمنگ وسيلن کي مهيا ڪرڻ جي اجازت ڏيو. ۽ صارف سڌو سنئون فراهم ڪندڙن سان رابطو ڪندا. هن غير مرڪزي طريقي سان، CloudRetro صرف ٽئين پارٽي جي اسٽريمنگ وسيلن کي صارفين سان ڳنڍڻ لاء هڪ فريم ورڪ آهي، ان کي وڌيڪ اسپيبل بڻائي ٿو جڏهن اهو وڌيڪ ميزبان نه آهي. WebRTC NAT Traversal جو ڪردار ھتي ٽين پارٽي اسٽريمنگ وسيلن تي پيئر-ٽو-پيئر ڪنيڪشن جي شروعات کي آسان بڻائڻ لاءِ تمام ضروري آھي، ٺاھيندڙ لاءِ نيٽ ورڪ سان ڳنڍڻ آسان بڻائي.

    وڊيو کمپريشن

    وڊيو ڪمپريشن پائپ لائن جو هڪ لازمي حصو آهي ۽ هڪ هموار وهڪري ۾ تمام گهڻو حصو ڏئي ٿو. جڏهن ته VP8/H264 وڊيو انڪوڊنگ جي هر تفصيل کي ڄاڻڻ ضروري نه آهي، تصورن کي سمجهڻ توهان کي اسٽريمنگ وڊيو اسپيڊ آپشنز کي سمجهڻ، غير متوقع رويي کي ڊيب ڪرڻ، ۽ ويڪرائي کي ترتيب ڏيڻ ۾ مدد ڪري سگھن ٿا.

    اسٽريمنگ سروس لاءِ وڊيو ڪمپريس ڪرڻ مشڪل آهي ڇو ته الورورٿم کي يقيني بڻائڻ گهرجي ته ڪل انڪوڊنگ وقت + نيٽ ورڪ ٽرانسميشن ٽائيم + ڊيڪوڊنگ وقت جيترو ٿي سگهي گهٽ آهي. ان کان علاوه، ڪوڊنگ جي عمل کي مسلسل ۽ مسلسل هجڻ گهرجي. ڪجھ انڪوڊنگ ٽريڊ آف لاڳو نه ٿيندا آھن- مثال طور، اسين ڊگھي انڪوڊنگ جي وقتن کي ننڍيون فائلن جي سائزن ۽ ڊيڪوڊنگ جي وقتن جي حق ۾ نه ٿا سگھون، يا متضاد ڪمپريشن استعمال ڪري سگھون ٿا.

    وڊيو ڪمپريشن جي پويان خيال معلومات جي غير ضروري بٽس کي ختم ڪرڻ آهي جڏهن ته صارفين لاءِ قابل قبول سطح جي درستگي کي برقرار رکڻ. انفرادي جامد تصويري فريم کي انڪوڊنگ ڪرڻ کان علاوه، الورورٿم موجوده فريم کي پوئين ۽ ايندڙ فريم مان ظاهر ڪري ٿو، تنهنڪري صرف انهن جو فرق موڪليو ويو آهي. جيئن ته Pacman سان مثال مان ڏسي سگهجي ٿو، صرف فرق پوائنٽ منتقل ڪيا ويا آهن.

    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    Pacman استعمال ڪندي ويڊيو فريم جو مقابلو مثال طور

    آڊيو کمپريشن

    ساڳئي طرح، آڊيو کمپريشن الگورتھم ڊيٽا کي ختم ڪري ٿو جيڪو انسانن طرفان سمجهي نه ٿو سگهجي. Opus هن وقت بهترين پرفارمنس آڊيو ڪوڊيڪ آهي. اهو آرڊر ٿيل ڊيٽاگرام پروٽوڪول جهڙوڪ آر ٽي پي (ريئل ٽائم ٽرانسپورٽ پروٽوڪول) تي آڊيو لهر کي منتقل ڪرڻ لاءِ ٺهيل آهي. ان جي ويڪرائي mp3 ۽ aac کان گهٽ آهي، ۽ معيار اعلي آهي. ويڪرائي عام طور تي 5 ~ 66,5ms جي چوڌاري آهي.

    Pion، Golang ۾ WebRTC

    پیاديو ھڪڙو کليل ذريعو منصوبو آھي جيڪو WebRTC کي گولانگ ڏانھن آڻيندو آھي. ڏيهي C++ WebRTC لائبريرين جي معمولي ريپنگ جي بدران، Pion WebRTC جو هڪ مقامي گولانگ عمل آهي بهتر ڪارڪردگي، Go انٽيگريشن، ۽ WebRTC پروٽوڪول تي ورجن ڪنٽرول سان.

    لائبريري پڻ اسٽريمنگ کي قابل بنائي ٿي تمام وڏي بلٽ ان سان ذيلي سيڪنڊ ليٽيسي سان. اهو STUN، DTLS، SCTP، وغيره جو پنهنجو نفاذ آهي. ۽ ڪجھ تجربا QUIC ۽ WebAssembly سان. هي اوپن سورس لائبريري پاڻ هڪ واقعي سٺي سکيا جو وسيلو آهي جنهن ۾ بهترين دستاويزن، نيٽ ورڪ پروٽوڪول لاڳو ڪرڻ، ۽ سٺا مثال آهن.

    Pion ڪميونٽي، هڪ تمام پرجوش تخليق ڪندڙ جي اڳواڻي ۾، ​​ڪافي جاندار آهي، WebRTC بابت تمام گهڻيون معيار جي بحثن سان. جيڪڏهن توهان هن ٽيڪنالاجي ۾ دلچسپي رکو ٿا، شامل ٿيو http://pion.ly/slack - توھان تمام گھڻيون نيون شيون سکندا.

    گولانگ ۾ CloudRetro لکڻ

    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    Go ۾ هڪ ڪم ڪندڙ جو عمل

    ايڪشن ۾ چينلز وڃو

    Go جي خوبصورت چينل ڊيزائن جي مهرباني، واقعن جي اسٽريمنگ ۽ اتفاق جي مسئلن کي تمام گهڻو آسان ڪيو ويو آهي. جيئن ڊراگرام ۾، مختلف GoRoutines ۾ متوازي طور تي هلندڙ ڪيترائي حصا آهن. هر جزو پنهنجي رياست کي منظم ڪري ٿو ۽ چينلن ذريعي رابطو ڪري ٿو. گولانگ جي چونڊيل دعويٰ هڪ ايٽمي واقعي کي راند ۾ هر وقت عمل ڪرڻ لاءِ مجبور ڪري ٿي (راند ٽڪ). هن جو مطلب آهي ته هن ڊزائن لاء ڪو به تالا لڳائڻ جي ضرورت ناهي. مثال طور، جڏهن صارف محفوظ ڪري ٿو، راند جي حالت جو هڪ مڪمل سنيپ شاٽ گهربل آهي. هي حالت جاري رهڻ گهرجي، لاگ ان ٿيڻ تائين جيستائين محفوظ مڪمل نه ٿئي. هر راند جي ٽڪ دوران، پس منظر صرف هڪ بچاء يا ان پٽ آپريشن کي سنڀاليندو، پروسيس جي سلسلي کي محفوظ بڻائي ٿو.

    func (e *gameEmulator) gameUpdate() {
    for {
    	select {
    		case <-e.saveOperation:
    			e.saveGameState()
    		case key := <-e.input:
    			e.updateGameState(key)
    		case <-e.done:
    			e.close()
    			return
    	}
        }
    }

    فين-ان/فين-آئوٽ

    ھي گولانگ ٽيمپليٽ منھنجي CrowdPlay ۽ گھڻن پليئر جي استعمال جي صورت ۾ بلڪل مناسب آھي. ھن نموني جي پٺيان، ھڪڙي ڪمري ۾ سڀني صارفن جي داخلا مرڪزي داخلي چينل ۾ ٺاھيو ويو آھي. گيم ميڊيا وري ساڳئي ڪمري ۾ سڀني استعمال ڪندڙن کي لڳايو ويو آهي. هن طريقي سان، اسان مختلف استعمال ڪندڙن جي ڪيترن ئي راندين جي سيشن جي وچ ۾ راندين جي رياست جي تقسيم حاصل ڪندا آهيون.

    WebRTC تي اوپن سورس ڪلائوڊ گيمنگ: p2p، ملٽي پليئر، صفر دير سان
    مختلف سيشن جي وچ ۾ هم وقت سازي

    گولانگ جا نقصان

    گولنگ مڪمل نه آهي. چينل سست آهي. بلاڪ ڪرڻ جي مقابلي ۾، گو چينل سمورو ۽ موضوعي واقعن کي سنڀالڻ جو آسان طريقو آهي، پر چينل بهترين ڪارڪردگي مهيا نٿو ڪري. چينل جي هيٺان پيچيده بلاڪنگ منطق آهي. تنهن ڪري مون عمل ۾ ڪجهه ترميمون ڪيون، ٻيهر لاڳو ڪرڻ لاڪ ۽ ايٽمي قدرن کي تبديل ڪيو جڏهن ڪارڪردگي کي بهتر ڪرڻ لاءِ چينلز کي تبديل ڪيو وڃي.

    ان کان علاوه گولاڙچي ۾ ڪچرو گڏ ڪرڻ وارو به غير منظم آهي، جنهن ڪري ڪڏهن ڪڏهن شڪي طور تي ڊگها رڪشا به لڳندا آهن. اهو تمام گهڻو مداخلت ڪري ٿو حقيقي وقت جي اسٽريمنگ ايپليڪيشن سان.

    سي اين جي

    پروجيڪٽ استعمال ڪري ٿو موجوده اوپن سورس Golang VP8/H264 لائبريري ميڊيا ڪمپريشن لاءِ ۽ ليبرٽرو گيم ايموليٽرز لاءِ. اهي سڀئي لائبريريون صرف سي لائبريري جا لفافي آهن Go استعمال ڪندي سي اين جي. ڪجھ نقصانن ۾ درج ٿيل آھن هي پوسٽ ڊيو چني طرفان. مون کي منهن ڏيڻ وارا مسئلا:

    • CGO ۾ حادثي کي پڪڙڻ ۾ ناڪامي، جيتوڻيڪ Golang RecoveryCrash سان؛
    • ڪارڪردگي جي رڪاوٽ کي سڃاڻڻ ۾ ناڪامي جڏهن اسان CGO ۾ تفصيلي مسئلن کي ڳولڻ ۾ ناڪام آهيون.

    ٿڪل

    مون ڪلائوڊ گيمنگ سروسز کي سمجهڻ ۽ هڪ پليٽ فارم ٺاهڻ جو پنهنجو مقصد حاصل ڪيو جيڪو منهنجي آن لائن دوستن سان ناسٽلجڪ ريٽرو گيمز کيڏڻ ۾ مدد ڪري. اهو منصوبو Pion لائبريري ۽ Pion ڪميونٽي جي سهڪار کان سواء ممڪن نه هجي ها. مان ان جي تمام گهڻي ترقي لاء شڪرگذار آهيان. WebRTC ۽ Pion پاران مهيا ڪيل سادي APIs بيحد انضمام کي يقيني بڻايو. منهنجي تصور جو پهريون ثبوت ساڳئي هفتي جاري ڪيو ويو، جيتوڻيڪ مون کي اڳوڻو ڄاڻ نه هئي پير کان پير (P2P) ڪميونيڪيشن.

    انضمام جي آسانيءَ جي باوجود، P2P اسٽريمنگ واقعي ڪمپيوٽر سائنس ۾ هڪ تمام پيچيده علائقو آهي. هن کي ڊگھي عرصي کان نيٽ ورڪ آرڪيٽيڪچر جي پيچيدگي سان معاملو ڪرڻو پوندو جهڙوڪ IP ۽ NAT هڪ پير کان پير سيشن ٺاهڻ لاءِ. هن پروجيڪٽ تي ڪم ڪرڻ دوران، مون نيٽ ورڪنگ ۽ ڪارڪردگي بهتر ڪرڻ بابت تمام قيمتي ڄاڻ حاصل ڪئي، تنهن ڪري مان هر ڪنهن کي همٿ ڏيان ٿو ته WebRTC استعمال ڪندي P2P پروڊڪٽس ٺاهڻ جي ڪوشش ڪري.

    CloudRetro سڀني استعمال جي ڪيسن کي پورو ڪري ٿو مون کي ريٽرو گيمر جي طور تي منهنجي نقطه نظر کان توقع آهي. بهرحال، منهنجو خيال آهي ته پروجيڪٽ ۾ ڪيترائي علائقا آهن جن کي آئون بهتر ڪري سگهان ٿو، جهڙوڪ نيٽورڪ کي وڌيڪ قابل اعتماد ۽ ڪارڪردگي، اعلي معيار جي گرافڪس مهيا ڪرڻ، يا صارفين جي وچ ۾ راندين کي حصيداري ڪرڻ جي صلاحيت. مان هن تي سخت محنت ڪري رهيو آهيان. مهرباني ڪري پيروي ڪريو پروجيڪٽ ۽ ان جي حمايت ڪريو جيڪڏھن توھان پسند ڪريو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو