የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት

የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
ሶፍትዌር እንደ አገልግሎት፣ መሠረተ ልማት እንደ አገልግሎት፣ መድረክ እንደ አገልግሎት፣ የመገናኛ መድረክ እንደ አገልግሎት፣ የቪዲዮ ኮንፈረንስ እንደ አገልግሎት፣ ስለ ደመና ጨዋታ እንደ አገልግሎትስ? እንደ ስታዲያ ያሉ የደመና ጨዋታን (ክላውድ ጌምንግ) ለመፍጠር ብዙ ሙከራዎች ተደርገዋል፣ በቅርቡ በGoogle የተጀመረው። ስታዲያ ለWebRTC አዲስ አይደለም።፣ ግን ሌሎች WebRTCን በተመሳሳይ መንገድ መጠቀም ይችላሉ?

Thanh Nguyen ይህንን እድል በክፍት ምንጭ ፕሮጄክቱ CloudRetro ላይ ለመሞከር ወሰነ። CloudRetro በ Pion ላይ የተመሰረተ ነው፣ ታዋቂ በGo ላይ የተመሰረተ WebRTC ቤተ-መጽሐፍት (ምስጋና ታይቷል። ይህንን ጽሑፍ ለማዘጋጀት ለእርዳታ ከፒዮን ልማት ቡድን). በዚህ ጽሁፍ ውስጥ ታህህ የፕሮጀክቱን አርክቴክቸር አጠቃላይ እይታ ያቀርባል፣ እንዲሁም ምን ጠቃሚ ነገሮችን እንደተማረ እና በስራው ወቅት ስላጋጠመው ፈተና ይናገራል።

ግቤት

ባለፈው አመት ጎግል ስታዲያን ሲያስተዋውቅ አእምሮዬን ነክቶታል። ሀሳቡ በጣም ልዩ እና ፈጠራ ያለው በመሆኑ ይህ አሁን ባለው ቴክኖሎጂ እንኳን እንዴት ሊሆን እንደሚችል ያለማቋረጥ አስብ ነበር። ይህንን ርዕስ በተሻለ ለመረዳት ያለው ፍላጎት የራሴን የክፍት ምንጭ የደመና ጨዋታ እንድፈጥር አነሳሳኝ። ውጤቱ በቀላሉ ድንቅ ነበር። ከዚህ በታች በዓመቴ ላይ የመሥራት ሂደቱን ማካፈል እፈልጋለሁ ፕሮጀክት.

TLDR፡ አጭር ስላይድ ስሪት ከድምቀቶች ጋር

ለምን የደመና ጨዋታ ወደፊት ነው።

ክላውድ ጌምንግ በቅርቡ የጨዋታ ብቻ ሳይሆን ሌሎች የኮምፒውተር ሳይንስ ዘርፎችም ቀጣዩ ትውልድ እንደሚሆን አምናለሁ። የክላውድ ጨዋታ የደንበኛው/የአገልጋይ ሞዴል ቁንጮ ነው። ይህ ሞዴል የበስተጀርባ አስተዳደርን ያሳድጋል እና የጨዋታ አመክንዮ በርቀት አገልጋይ ላይ በማስተናገድ እና ምስሎችን/ድምጽን ለደንበኛው በማሰራጨት የፊት ለፊት ስራን ይቀንሳል። አገልጋዩ ከባድ ሂደትን ስለሚሰራ ደንበኛው በሃርድዌር ውስንነቶች ምህረት ላይ እንዳይሆን ያደርጋል።

Google Stadia በመሠረቱ እንዲጫወቱ ያስችልዎታል AAA ጨዋታዎች (ማለትም ከፍተኛ-መጨረሻ ብሎክበስተር ጨዋታዎች) እንደ YouTube ባለው በይነገጽ ላይ። ተመሳሳይ ዘዴ እንደ ኦፕሬቲንግ ሲስተም ወይም 2D/3D ግራፊክ ዲዛይን ወዘተ ባሉ ከባድ የመስመር ውጪ መተግበሪያዎች ላይ ሊተገበር ይችላል። በበርካታ መድረኮች ላይ በዝቅተኛ-ስፔክ መሳሪያዎች ላይ በቋሚነት እነሱን ለማስኬድ እንድንችል።

የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
የዚህ ቴክኖሎጂ የወደፊት እጣ ፈንታ፡ ማይክሮሶፍት ዊንዶውስ 10 በ Chrome አሳሽ ላይ ቢሰራ አስቡት?

የክላውድ ጨዋታ በቴክኒካል ፈታኝ ነው።

ጨዋታ የማያቋርጥ ፈጣን የተጠቃሚ ምላሽ ከሚፈለግባቸው ብርቅዬ አካባቢዎች አንዱ ነው። አንድ ገጽ ላይ ጠቅ ስናደርግ አልፎ አልፎ የ2 ሰከንድ መዘግየት ካጋጠመን ይህ ተቀባይነት አለው። የቀጥታ የቪዲዮ ዥረቶች ለጥቂት ሰከንዶች የመዘግየት አዝማሚያ አላቸው፣ ግን አሁንም ምክንያታዊ አጠቃቀምን ይሰጣሉ። ሆኖም ጨዋታው በተደጋጋሚ በ500ሚሴ የሚዘገይ ከሆነ በቀላሉ መጫወት አይቻልም። ግባችን በግብአት እና በመገናኛ ብዙሃን መካከል ያለው ክፍተት በተቻለ መጠን አነስተኛ እንዲሆን እጅግ በጣም ዝቅተኛ መዘግየትን ማሳካት ነው። ስለዚህ, የቪዲዮ ዥረት ባህላዊ አቀራረብ እዚህ ላይ ተግባራዊ አይደለም.

የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
አጠቃላይ የደመና ጨዋታ አብነት

ክፍት ምንጭ ፕሮጀክት CloudRetro

እንደዚህ ባሉ ጥብቅ የአውታረ መረብ ገደቦች ይህ ሁሉ ይቻል እንደሆነ ለማየት የደመና ጨዋታ የሙከራ ናሙና ለመፍጠር ወሰንኩ። ጎላንግን ለፅንሰ-ሃሳቡ ማረጋገጫ የመረጥኩት ቋንቋው በጣም የማውቀው ቋንቋ ስለሆነ እና በሌሎች በርካታ ምክንያቶች ለዚህ ትግበራ ተስማሚ ስለነበር በኋላ ላይ እንዳገኘሁት። ሂድ ቀላል እና በጣም በፍጥነት ያዳብራል; በGo ውስጥ ያሉ ቻናሎች ባለብዙ-ክር ንባብን ለማስተዳደር በጣም ጥሩ ናቸው።

ፕሮጀክቱ CloudRetro.io ለሬትሮ ጨዋታ ክፍት ምንጭ የደመና ጨዋታ አገልግሎት ነው። የፕሮጀክቱ አላማ በጣም ምቹ የሆነ የጨዋታ ልምድን ወደ ባህላዊ ሬትሮ ጨዋታዎች ማምጣት እና ብዙ ተጫዋች መጨመር ነው።
ስለ ፕሮጀክቱ እዚህ የበለጠ ማወቅ ይችላሉ- https://github.com/giongto35/cloud-game.

CloudRetro ተግባር

የደመና ጨዋታን ኃይል ለማሳየት CloudRetro retro ጨዋታዎችን ይጠቀማል። ይህም ብዙ ልዩ የጨዋታ ልምዶችን እንድታገኝ ያስችልሃል።

  • የጨዋታው ተንቀሳቃሽነት
    • ገጽ ሲከፍት ፈጣን መልሶ ማጫወት; ምንም ማውረድ ወይም መጫን አያስፈልግም
    • በሞባይል አሳሽ ውስጥ ይሰራል፣ ስለዚህ እሱን ለማስኬድ ምንም ሶፍትዌር አያስፈልግም

  • የጨዋታ ክፍለ-ጊዜዎች በተለያዩ መሳሪያዎች ላይ ሊጋሩ እና ለሚቀጥለው ጊዜ ሲገቡ በደመና ውስጥ ሊከማቹ ይችላሉ።
  • ጨዋታው በዥረት ሊለቀቅ ይችላል ወይም በብዙ ተጠቃሚዎች በአንድ ጊዜ መጫወት ይችላል፡-
    • Crowdplay ልክ እንደ TwitchPlayPokemon፣ ብዙ መስቀለኛ ፕላትፎርም እና ተጨማሪ የእውነተኛ ጊዜ
    • ከመስመር ውጭ ጨዋታዎች በመስመር ላይ። ብዙ ተጠቃሚዎች አውታረ መረብ ሳያዘጋጁ መጫወት ይችላሉ። Samurai Shodown አሁን በ CloudRetro አውታረ መረብ ላይ በ2 ተጫዋቾች መጫወት ይችላል።

    የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    በተለያዩ መሳሪያዎች ላይ የመስመር ላይ ባለብዙ ተጫዋች ጨዋታ ማሳያ ስሪት

    መሰረተ ልማት

    መስፈርቶች እና የቴክኖሎጂ ቁልል

    ከዚህ በታች ፕሮጀክቱን ከመጀመርዎ በፊት ያስቀመጥኳቸው መስፈርቶች ዝርዝር ነው.

    1. አንድ ተጫዋች
    ይህ መስፈርት እዚህ ላይ በጣም አስፈላጊ ወይም ግልጽ ላይመስል ይችላል፣ ነገር ግን ከቁልፍ ማውረዴ አንዱ ነው፣ የደመና ጨዋታ በተቻለ መጠን ከባህላዊ የዥረት አገልግሎቶች እንዲርቅ ያስችለዋል። በነጠላ-ተጫዋች ጨዋታ ላይ ካተኮርን የተማከለ አገልጋይ ወይም ሲዲኤንን ማስወገድ እንችላለን ምክንያቱም ወደ ብዙሀን መልቀቅ ስለሌለብን ነው። ዥረቶችን ወደ ማጠቢያ አገልጋይ ከመስቀል ወይም እሽጎችን ወደ የተማከለ የዌብሶኬት አገልጋይ ከማስተላለፍ ይልቅ የአገልግሎት ዥረቶች በአቻ ለአቻ WebRTC ግንኙነት በቀጥታ ለተጠቃሚው ይደርሳሉ።

    2. ዝቅተኛ መዘግየት የሚዲያ ዥረት
    ስለ ስታዲያ በማንበብ ብዙ ጊዜ WebRTC በአንዳንድ መጣጥፎች ላይ ሲጠቀስ አያለሁ። WebRTC እጅግ የላቀ ቴክኖሎጂ እንደሆነ ተገነዘብኩ እና በደመና ጨዋታ ውስጥ ለመጠቀም ፍጹም ነው። WebRTC የድር አሳሾችን እና የሞባይል አፕሊኬሽኖችን በቅጽበታዊ ግንኙነት በቀላል ኤፒአይ የሚሰጥ ፕሮጀክት ነው። የአቻ ለአቻ ግንኙነትን ያቀርባል፣ ለመገናኛ ብዙሃን የተመቻቸ ነው፣ እና እንደ VP8 እና H264 ያሉ መደበኛ ኮዴኮች አሉት።

    ከፍተኛ ጥራት ያላቸውን ግራፊክስ ከማቆየት ይልቅ ምርጡን የተጠቃሚ ተሞክሮ ማረጋገጥ ቅድሚያ ሰጥቻለሁ። አንዳንድ ኪሳራዎች በአልጎሪዝም ውስጥ ተቀባይነት አላቸው. ጎግል ስታዲያ በአገልጋዩ ላይ ያለውን የምስል መጠን የመቀነስ ተጨማሪ እርምጃ አለው፣ እና ፍሬሞች ወደ እኩዮች ከመተላለፉ በፊት ወደ ከፍተኛ ጥራት ከፍ ተደርገዋል።

    3. የተከፋፈለ መሠረተ ልማት ከጂኦግራፊያዊ መስመር ጋር
    የመጭመቂያው አልጎሪዝም እና ኮድ ምንም ያህል የተመቻቹ ቢሆኑም፣ አውታረ መረቡ አሁንም ለመዘግየት ከፍተኛውን አስተዋፅኦ የሚወስን አካል ነው። የሽርሽር ጊዜን (RTT) ለመቀነስ አርክቴክቸር ከተጠቃሚው ጋር የሚቀርበውን አገልጋይ ለማጣመር ዘዴ ሊኖረው ይገባል። አርክቴክቸር 1 አስተባባሪ እና በመላው አለም የሚሰራጩ በርካታ የዥረት ሰርቨሮች ሊኖሩት ይገባል፡ US West፣ US East፣ Europe፣ Singapore፣ China ሁሉም የዥረት ሰርቨሮች ሙሉ በሙሉ የተገለሉ መሆን አለባቸው። ሰርቨር ሲቀላቀል ወይም ሲወጣ ስርዓቱ ስርጭቱን ማስተካከል ይችላል። ስለዚህ, በትልቅ ትራፊክ, ተጨማሪ አገልጋዮችን መጨመር አግድም መለኪያን ይፈቅዳል.

    4. የአሳሽ ተኳኋኝነት
    የክላውድ ጨዋታ ከተጠቃሚዎች ትንሹን በሚፈልግበት ጊዜ በጥሩ ሁኔታ ላይ ነው። ይህ ማለት በአሳሽ ውስጥ ማስኬድ ይቻላል. አሳሾች የጨዋታውን ልምድ ለተጠቃሚዎች በተቻለ መጠን ምቹ ለማድረግ ይረዳሉ፣ ይህም ሶፍትዌር እና ሃርድዌር ከመትከል ያድናቸዋል። አሳሾች በሞባይል እና በዴስክቶፕ ስሪቶች መካከል የመድረክ-አቋራጭ ተግባራትን ለማቅረብ ይረዳሉ። እንደ እድል ሆኖ፣ WebRTC በተለያዩ አሳሾች በደንብ ይደገፋል።

    5. የጨዋታውን በይነገጽ እና አገልግሎት ግልጽ መለያየት
    የደመና ጨዋታ አገልግሎቱን እንደ መድረክ እመለከተዋለሁ። ሁሉም ሰው ማንኛውንም ነገር ከመድረክ ጋር ማገናኘት መቻል አለበት። አሁን ተዋህጄአለሁ። LibRetro ከCloud ጨዋታ አገልግሎት ጋር ምክንያቱም LibRetro እንደ SNES፣ GBA፣ PS ላሉ ሬትሮ ጨዋታዎች የሚያምር የጨዋታ emulator በይነገጽ ያቀርባል።

    6. ለባለብዙ ተጫዋች፣ ለሕዝብ ጨዋታ እና ለውጫዊ ትስስር (ጥልቅ-ሊንክ) ከጨዋታው ጋር ክፍሎች
    CloudRetro እንደ CrowdPlay እና Online MultiPlayer ለሬትሮ ጨዋታዎች ያሉ ብዙ አዳዲስ ጨዋታዎችን ይደግፋል። ብዙ ተጠቃሚዎች በተለያዩ ኮምፒውተሮች ላይ አንድ አይነት ጥልቅ-ሊንክ ከከፈቱ አንድ አይነት ጨዋታ ሲሮጥ ያያሉ እና እንዲያውም መቀላቀል ይችላሉ።

    ከዚህም በላይ የጨዋታ ግዛቶች በደመና ማከማቻ ውስጥ ተከማችተዋል. ይህ ተጠቃሚዎች በማንኛውም ጊዜ በማንኛውም ሌላ መሳሪያ ላይ መጫወት እንዲቀጥሉ ያስችላቸዋል።

    7. አግድም ልኬት
    በአሁኑ ጊዜ እንደማንኛውም SAAS፣ የደመና ጨዋታ በአግድም ሊሰፋ የሚችል መሆን አለበት። የአስተባባሪው-ሰራተኛ ንድፍ ተጨማሪ ትራፊክን ለማገልገል ተጨማሪ ሰራተኞችን ለመጨመር ያስችልዎታል.

    8. ከአንድ ደመና ጋር ምንም ግንኙነት የለም
    የCloudRetro መሠረተ ልማት የሚስተናገደው በተለያዩ የደመና አቅራቢዎች (ዲጂታል ውቅያኖስ፣ አሊባባ፣ ብጁ አቅራቢ) ለተለያዩ ክልሎች ነው። በአንድ የደመና አቅራቢ ውስጥ መቆለፍን ለማስወገድ በዶከር ኮንቴይነር ውስጥ ለመሠረተ ልማት እንዲሠራ እና የአውታረ መረብ ቅንብሮችን ባሽ ስክሪፕት አዋቅራለሁ። ይህንን በWebRTC ውስጥ ከNAT Traversal ጋር በማጣመር CloudRetroን በማንኛውም የደመና መድረክ ላይ እና በማንኛውም የተጠቃሚ ማሽኖች ላይ እንኳን ለማሰማራት ተለዋዋጭነት ሊኖረን ይችላል።

    የስነ-ህንፃ ንድፍ

    ሰራተኛ፡ (ወይም ከላይ የተጠቀሰው የዥረት ማሰራጫ አገልጋይ) ጨዋታዎችን ያበዛል፣ የመቀየሪያ ቧንቧ መስመርን ያስኬዳል እና ኢንኮድ የተደረገውን ሚዲያ ለተጠቃሚዎች ያሰራጫል። የሰራተኛ አጋጣሚዎች በመላው አለም ተሰራጭተዋል፣ እና እያንዳንዱ ሰራተኛ ብዙ የተጠቃሚ ክፍለ ጊዜዎችን በአንድ ጊዜ ማስተናገድ ይችላል።

    አስተባባሪ፡- አዲሱን ተጠቃሚ ለመልቀቅ በጣም ተስማሚ ከሆነው ሰራተኛ ጋር የማጣመር ሃላፊነት አለበት። አስተባባሪው በWebSocket በኩል ከሰራተኞች ጋር ይገናኛል።

    የጨዋታ ሁኔታ ማከማቻ፡ ለሁሉም የጨዋታ ግዛቶች ማዕከላዊ የርቀት ማከማቻ። ይህ ማከማቻ እንደ የርቀት ማስቀመጫ/መጫን ያሉ ጠቃሚ ተግባራትን ይሰጣል።

    የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    የCloudRetro ከፍተኛ ደረጃ አርክቴክቸር

    ብጁ ስክሪፕት

    አዲስ ተጠቃሚ CloudRetroን በደረጃ 1 እና 2 ሲከፍት አስተባባሪው ካሉት ሰራተኞች ዝርዝር ጋር ወደ መጀመሪያው ገጽ ይጠየቃል። ከዚህ በኋላ በደረጃ 3 ደንበኛው የኤችቲቲፒ ፒንግ ጥያቄን በመጠቀም ለሁሉም እጩዎች መዘግየቶችን ያሰላል። ተጠቃሚውን ለማገልገል በጣም ተስማሚ የሆነውን ሠራተኛ እንዲወስን ይህ የዘገየ ዝርዝር ወደ አስተባባሪው ይላካል። ከታች ያለው ደረጃ 4 ጨዋታውን ይፈጥራል. የWebRTC ዥረት ግንኙነት በተጠቃሚው እና በተመደበው ሰራተኛ መካከል ይመሰረታል።
    የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    መዳረሻ ካገኘ በኋላ የተጠቃሚ ስክሪፕት።

    በሠራተኛው ውስጥ ያለው

    የጨዋታ እና የዥረት ቧንቧዎች በሠራተኛው ውስጥ በተናጥል ተቀምጠዋል እና እዚያ በይነገጽ መረጃ ይለዋወጣሉ። በአሁኑ ጊዜ ይህ ግንኙነት የሚከናወነው በማህደረ ትውስታ መረጃን በማስተላለፍ ነው። የጎላንግ ቻናሎች በተመሳሳይ ሂደት. የሚቀጥለው ግብ መለያየት ነው, ማለትም. በሌላ ሂደት ውስጥ የጨዋታውን ገለልተኛ ማስጀመር።

    የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    የሰራተኛ አካላት መስተጋብር

    ዋና ዋና ክፍሎች:

    • WebRTC፡ የተጠቃሚን ግብአት የሚቀበል እና ኮድ የተደረገ ሚዲያ ከአገልጋዩ የሚያወጣ የደንበኛ አካል።
    • የጨዋታ አስማሚ፡- የጨዋታ አካል. ለሊብሬትሮ ቤተ-መጽሐፍት ምስጋና ይግባውና ስርዓቱ ጨዋታውን በተመሳሳይ ሂደት ውስጥ ለማስኬድ እና ሚዲያ እና የግብአት ዥረትን በውስጥ ለመጥለፍ ይችላል።
    • የውስጠ-ጨዋታ ክፈፎች ተይዘው ወደ መቀየሪያው ይላካሉ።
    • ምስል/ኦዲዮ ኢንኮደር፡ የሚዲያ ፍሬሞችን የሚወስድ፣ ከበስተጀርባ የሚስጥር እና የተመሰጠሩ ምስሎች/ድምጽ የሚያወጣ ኢንኮዲንግ ቧንቧ።

    ትግበራ

    CloudRetro በWebRTC ላይ እንደ የጀርባ አጥንት ቴክኖሎጂ ይተማመናል, ስለዚህ ወደ ጎላንግ አተገባበር ዝርዝሮች ከመውሰዴ በፊት, ስለ WebRTC እራሱ ለመናገር ወሰንኩ. ይህ መረጃን ለማሰራጨት ንዑስ ሰከንድ መዘግየትን እንዳሳካ በጣም የረዳኝ አስደናቂ ቴክኖሎጂ ነው።

    WebRTC

    WebRTC የተነደፈው ቀላል ኤፒአይዎችን በመጠቀም ቤተኛ የሞባይል መተግበሪያዎች እና አሳሾች ላይ ከፍተኛ ጥራት ያላቸውን የአቻ ለአቻ ግንኙነቶችን ለማቅረብ ነው።

    NAT መሻገር

    WebRTC በNAT Traversal ተግባር ይታወቃል። WebRTC የተነደፈው ለአቻ ለአቻ ግንኙነት ነው። አላማው በተባለው ሂደት የ NAT መግቢያ መንገዶችን እና ፋየርዎልን ለአቻ ለአቻ ግንኙነት በማድረግ በጣም ተስማሚ የሆነ ቀጥተኛ መንገድ ማግኘት ነው። ICE. እንደ የዚህ ሂደት አካል፣ የWebRTC APIs STUN አገልጋዮችን በመጠቀም ይፋዊ አይፒ አድራሻዎን ፈልገው ወደ ማስተላለፊያ አገልጋዩ ያስተላልፋሉ (ተራ) ቀጥተኛ ግንኙነት መፍጠር በማይቻልበት ጊዜ.

    ሆኖም፣ CloudRetro ይህን ባህሪ ሙሉ በሙሉ አይጠቀምበትም። የአቻ ለአቻ ግንኙነቱ በተጠቃሚዎች መካከል ሳይሆን በተጠቃሚዎች እና በደመና አገልጋዮች መካከል የለም። የአምሳያው የአገልጋይ ጎን ከተለመደው የተጠቃሚ መሳሪያ ያነሰ ቀጥተኛ የግንኙነት ገደቦች አሉት። አገልጋዩ ከኤንኤቲ ጀርባ ስለሌለ ይህ ገቢ ወደቦችን አስቀድመው እንዲከፍቱ ወይም የህዝብ አይፒ አድራሻዎችን በቀጥታ እንዲጠቀሙ ይፈቅድልዎታል።

    ከዚህ ቀደም ፕሮጀክቱን ለ Cloud Gaming የጨዋታ ስርጭት መድረክ መቀየር ፈልጌ ነበር። ሀሳቡ የጨዋታ ፈጣሪዎች ጨዋታዎችን እና የዥረት ምንጮችን እንዲያቀርቡ መፍቀድ ነበር። እና ተጠቃሚዎች ከአቅራቢዎች ጋር በቀጥታ ይገናኛሉ። በዚህ ያልተማከለ መንገድ፣ CloudRetro የሶስተኛ ወገን ዥረት ሃብቶችን ከተጠቃሚዎች ጋር የማገናኘት ማዕቀፍ ብቻ ሲሆን ይህም በማይስተናገድበት ጊዜ የበለጠ እንዲሰፋ ያደርገዋል። የWebRTC NAT Traversal ሚና እዚህ በሶስተኛ ወገን ዥረት ምንጮች ላይ የአቻ ለአቻ ግንኙነት መጀመርን ለማመቻቸት በጣም አስፈላጊ ነው፣ ይህም ፈጣሪ ከአውታረ መረቡ ጋር ለመገናኘት ቀላል ያደርገዋል።

    የቪዲዮ መጭመቂያ

    የቪዲዮ መጭመቅ አስፈላጊ ያልሆነ የቧንቧ መስመር አካል ነው እና ለስላሳ ፍሰት ከፍተኛ አስተዋጽኦ ያደርጋል። እያንዳንዱን የ VP8/H264 ቪዲዮ ኢንኮዲንግ ዝርዝር ማወቅ አስፈላጊ ባይሆንም፣ ፅንሰ-ሀሳቦቹን መረዳት የዥረት ቪዲዮ ፍጥነት አማራጮችን ለመረዳት፣ ያልተጠበቀ ባህሪን ለማረም እና መዘግየትን ለማስተካከል ይረዳዎታል።

    ለዥረት አገልግሎት ቪዲዮን መጫን ፈታኝ ነው ምክንያቱም አልጎሪዝም አጠቃላይ የመቀየሪያ ጊዜ + የአውታረ መረብ ስርጭት ጊዜ + የመግለጫ ጊዜ በተቻለ መጠን ዝቅተኛ መሆኑን ማረጋገጥ አለበት። በተጨማሪም, የኮድ ሂደቱ ተከታታይ እና ቀጣይ መሆን አለበት. አንዳንድ ኢንኮዲንግ ጥፋቶች አይተገበሩም—ለምሳሌ፣ ከትንሽ የፋይል መጠኖች እና የመግለጫ ጊዜዎች ይልቅ ረጅም የመቀየሪያ ጊዜዎችን መደገፍ አንችልም ወይም ወጥነት የሌለውን መጭመቅ መጠቀም አንችልም።

    ከቪዲዮ መጭመቂያው በስተጀርባ ያለው ሃሳብ ለተጠቃሚዎች ተቀባይነት ያለው ትክክለኛነት ደረጃ እየጠበቀ አላስፈላጊ የሆኑ ቢትስ መረጃዎችን ማስወገድ ነው። የግለሰብ የማይንቀሳቀሱ የምስል ክፈፎችን ከማስቀመጥ በተጨማሪ አልጎሪዝም የአሁኑን ፍሬም ከቀደምት እና ከሚቀጥሉት ያስገባል, ስለዚህ ልዩነታቸው ብቻ ይላካል. ከፓክማን ምሳሌ እንደሚታየው, ልዩ ልዩ ነጥቦች ብቻ ይተላለፋሉ.

    የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    ፓክማንን እንደ ምሳሌ በመጠቀም የቪዲዮ ፍሬሞችን ማወዳደር

    የድምጽ መጭመቅ

    በተመሳሳይ፣ የኦዲዮ መጭመቂያው ስልተ-ቀመር በሰዎች ሊገነዘቡት የማይችሉትን መረጃዎች ይተዋል ። ኦፐስ በአሁኑ ጊዜ ምርጡ አፈጻጸም ያለው የኦዲዮ ኮዴክ ነው። እንደ RTP (የሪል ታይም ትራንስፖርት ፕሮቶኮል) ባሉ በታዘዘ ዳታግራም ፕሮቶኮል ላይ የድምጽ ሞገድ ለማስተላለፍ የተነደፈ ነው። የእሱ መዘግየት ከmp3 እና aac ያነሰ ነው፣ እና ጥራቱ ከፍ ያለ ነው። የቆይታ ጊዜ በአብዛኛው ከ5~66,5ms አካባቢ ነው።

    ፒዮን፣ WebRTC በጎላንግ ውስጥ

    ፓውን WebRTCን ወደ ጎላንግ የሚያመጣ ክፍት ምንጭ ፕሮጀክት ነው። ከተለመደው የC++ WebRTC ቤተ-መጽሐፍት ይልቅ ፒዮን የተሻለ አፈጻጸም፣ Go ውህደት እና በWebRTC ፕሮቶኮሎች ላይ የስሪት ቁጥጥር ያለው የWebRTC ቤተኛ የጎላንግ ትግበራ ነው።

    ቤተ መፃህፍቱ እንዲሁ በንዑስ ሰከንድ መዘግየት በጣም ብዙ አብሮ የተሰሩ ዥረቶችን መልቀቅን ያስችላል። የራሱ የ STUN, DTLS, SCTP, ወዘተ አተገባበር አለው. እና በQUIC እና WebAssembly አንዳንድ ሙከራዎች። ይህ ክፍት ምንጭ ቤተ-መጽሐፍት እራሱ እጅግ በጣም ጥሩ ሰነዶች፣ የአውታረ መረብ ፕሮቶኮል አተገባበር እና ጥሩ ምሳሌዎች ያለው ጥሩ የመማሪያ ምንጭ ነው።

    በጣም አፍቃሪ በሆነ ፈጣሪ የሚመራ የፒዮን ማህበረሰብ በጣም ንቁ ነው፣ ብዙ ጥራት ያላቸው ውይይቶች ስለWebRTC እየተደረጉ ነው። በዚህ ቴክኖሎጂ ላይ ፍላጎት ካሎት ይቀላቀሉ http://pion.ly/slack - ብዙ አዳዲስ ነገሮችን ይማራሉ.

    በጎላንግ ውስጥ CloudRetro በመጻፍ ላይ

    የክፍት ምንጭ የደመና ጨዋታ በWebRTC፡ p2p፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    በ 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፣ ባለብዙ ተጫዋች፣ ዜሮ መዘግየት
    በተለያዩ ክፍለ-ጊዜዎች መካከል ማመሳሰል

    የጎላንግ ጉዳቶች

    ጎላንግ ፍጹም አይደለም። ቻናሉ ቀርፋፋ ነው። ከማገድ ጋር ሲነጻጸር፣ Go channel በቀላሉ በተመሳሳይ እና በክር የተደረጉ ክስተቶችን ለማስተናገድ ቀላል መንገድ ነው፣ ነገር ግን ቻናል ጥሩ አፈጻጸም አይሰጥም። ከሰርጡ ስር የተወሳሰበ የማገጃ ሎጂክ አለ። ስለዚህ አፈፃፀሙን ለማመቻቸት ቻናሎችን በምትተካበት ጊዜ መቆለፊያዎችን እና የአቶሚክ እሴቶችን በመተግበር ላይ አንዳንድ ማስተካከያዎችን አድርጌያለሁ።

    በተጨማሪም በጎላንግ ውስጥ ያለው የቆሻሻ አሰባሳቢ ቁጥጥር ያልተደረገለት ሲሆን ይህም አንዳንድ ጊዜ በጥርጣሬ ረጅም ቆም ማለትን ያስከትላል። ይህ በእውነተኛ ጊዜ የዥረት መተግበሪያ ላይ በጣም ጣልቃ ይገባል።

    ሲ.ጂ.ጂ.

    ፕሮጀክቱ ነባሩን ክፍት ምንጭ Golang VP8/H264 ለሚዲያ መጭመቂያ እና ሊብሬትሮ ለጨዋታ አስማሚዎች ይጠቀማል። እነዚህ ሁሉ ቤተ-መጻሕፍት በቀላሉ በ Go ውስጥ የC ላይብረሪ መጠቅለያዎች ናቸው። ሲ.ጂ.ጂ.. አንዳንድ ጉዳቶች በ ውስጥ ተዘርዝረዋል ይህ ልጥፍ በዴቭ ቼኒ. ያጋጠሙኝ ችግሮች፡-

    • በጎላንግ መልሶ ማገገሚያ ችግር እንኳን በሲጂኦ ውስጥ ብልሽት ለመያዝ አለመቻል;
    • በሲጂኦ ውስጥ ዝርዝር ችግሮችን መለየት ስንችል የአፈጻጸም ማነቆዎችን መለየት አለመቻል።

    መደምደሚያ

    የደመና ጨዋታ አገልግሎቶችን የመረዳት ግቤን አሳክቻለሁ እና በመስመር ላይ ከጓደኞቼ ጋር የናፍቆት ሬትሮ ጨዋታዎችን እንድጫወት የሚያግዘኝ መድረክ መፍጠር። ያለ ፒዮን ቤተ-መጽሐፍት እና የፒዮን ማህበረሰብ ድጋፍ ይህ ፕሮጀክት ሊሳካ አይችልም ነበር። ለተጠናከረ ልማት እጅግ በጣም አመስጋኝ ነኝ። በWebRTC እና Pion የቀረቡት ቀላል ኤፒአይዎች እንከን የለሽ ውህደትን አረጋግጠዋል። ስለ አቻ ለአቻ (P2P) ግንኙነት ምንም ቀድሞ እውቀት ባይኖረኝም የእኔ የመጀመሪያ የፅንሰ-ሀሳብ ማረጋገጫ በዚያው ሳምንት ተለቋል።

    የመዋሃድ ቀላል ቢሆንም፣ P2P ዥረት በኮምፒዩተር ሳይንስ ውስጥ በጣም የተወሳሰበ አካባቢ ነው። የአቻ ለአቻ ክፍለ ጊዜ ለመፍጠር እንደ IP እና NAT ያሉ የረዥም ጊዜ የኔትወርክ አርክቴክቸር ውስብስብ ነገሮችን መቋቋም አለባት። በዚህ ፕሮጀክት ላይ በምሠራበት ጊዜ ስለ አውታረመረብ ግንኙነት እና የአፈፃፀም ማመቻቸት ብዙ ጠቃሚ እውቀት አግኝቻለሁ፣ ስለዚህ ሁሉም ሰው WebRTCን በመጠቀም P2P ምርቶችን እንዲገነቡ አበረታታለሁ።

    CloudRetro እንደ ሬትሮ ተጫዋች ከኔ እይታ የጠበኳቸውን ሁሉንም የአጠቃቀም ጉዳዮች ያሟላል። ሆኖም ግን፣ እኔ እንደማስበው በፕሮጀክቱ ውስጥ ማሻሻል የምችላቸው ብዙ ቦታዎች አሉ ለምሳሌ አውታረ መረቡ ይበልጥ አስተማማኝ እና አፈጻጸም ያለው፣ ከፍተኛ ጥራት ያለው የጨዋታ ግራፊክስ ማቅረብ ወይም ጨዋታዎችን በተጠቃሚዎች መካከል የመጋራት ችሎታ። በዚህ ላይ ጠንክሬ እየሰራሁ ነው። እባኮትን ተከተሉ ፕሮጀክት እና ከወደዱት ይደግፉት.

ምንጭ: hab.com

አስተያየት ያክሉ