WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය

WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
මෘදුකාංගයක් සේවාවක් ලෙස, යටිතල පහසුකම් සේවාවක් ලෙස, වේදිකාවක් සේවාවක් ලෙස, සන්නිවේදන වේදිකාවක් සේවාවක් ලෙස, වීඩියෝ සම්මන්ත්‍රණ සේවාවක් ලෙස, සේවාවක් ලෙස ක්ලවුඩ් ක්‍රීඩා ගැන කුමක් කිව හැකිද? Google විසින් මෑතකදී දියත් කරන ලද Stadia වැනි ක්ලවුඩ් ක්‍රීඩා (Cloud Gaming) නිර්මාණය කිරීමට දැනටමත් උත්සාහයන් කිහිපයක්ම තිබේ. ස්ටේඩියා WebRTC වෙත අලුත් නොවේ, නමුත් අනෙක් අයට WebRTC එකම ආකාරයෙන් භාවිතා කළ හැකිද?

Thanh Nguyen ඔහුගේ විවෘත මූලාශ්‍ර ව්‍යාපෘතිය වන CloudRetro හි මෙම අවස්ථාව පරීක්ෂා කිරීමට තීරණය කළේය. CloudRetro Pion මත පදනම් වේ, ජනප්රිය Go මත පදනම් වූ WebRTC පුස්තකාලය (ස්තුතියි පෙන්වා ඇත මෙම ලිපිය සකස් කිරීමේදී ඔවුන්ගේ සහාය සඳහා Pion සංවර්ධන කණ්ඩායමෙන්). මෙම ලිපියෙන්, Thanh ඔහුගේ ව්‍යාපෘතියේ ගෘහනිර්මාණ ශිල්පය පිළිබඳ දළ විශ්ලේෂණයක් සපයන අතර, ඔහු ඉගෙන ගත් ප්‍රයෝජනවත් දේවල් මොනවාද සහ ඔහුගේ කාර්යයේදී ඔහු මුහුණ දුන් අභියෝග මොනවාද යන්න ගැනද කතා කරයි.

පිවිසුම්

පසුගිය වසරේ, Google Stadia නිවේදනය කළ විට, එය මගේ මනස අවුල් විය. අදහස කෙතරම් අද්විතීය සහ නව්‍යද යත්, පවතින තාක්‍ෂණයෙන් පවා මෙය කළ හැක්කේ කෙසේදැයි මම නිරන්තරයෙන් කල්පනා කළෙමි. මෙම මාතෘකාව වඩා හොඳින් අවබෝධ කර ගැනීමට ඇති ආශාව විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩාවක මගේම අනුවාදයක් නිර්මාණය කිරීමට මා පොළඹවන ලදී. ප්රතිඵලය හුදෙක් අතිවිශිෂ්ට විය. පහතින් මම මගේ වසරේ වැඩ කිරීමේ ක්‍රියාවලිය බෙදා ගැනීමට කැමතියි ව්යාපෘතිය.

TLDR: උද්දීපනය සහිත කෙටි විනිවිදක අනුවාදය

වලාකුළු ක්‍රීඩා අනාගතය වන්නේ ඇයි?

ක්ලවුඩ් සූදු ක්‍රීඩාව පමණක් නොව පරිගණක විද්‍යාවේ අනෙකුත් ක්ෂේත්‍රවල ද ඊළඟ පරම්පරාව බවට පත් වනු ඇතැයි මම විශ්වාස කරමි. Cloud gaming යනු සේවාදායක/සේවාදායක ආකෘතියේ උච්චතම අවස්ථාවයි. මෙම ආකෘතිය දුරස්ථ සේවාදායකයක් මත ක්‍රීඩා තාර්කික සත්කාරකත්වය සහ සේවාලාභියාට රූප/ශ්‍රව්‍ය ප්‍රවාහය කිරීමෙන් පසුපෙළ කළමනාකරණය උපරිම කරන අතර ඉදිරිපස කාර්යය අවම කරයි. සේවාදායකයා බර සැකසුම් සිදු කරයි, එබැවින් සේවාදායකයා තවදුරටත් දෘඪාංග සීමාවන්ට අනුකම්පා නොකරයි.

Google Stadia ඔබට අවශ්‍යයෙන්ම ක්‍රීඩා කිරීමට ඉඩ දෙයි AAA ක්රීඩා (එනම් ඉහළ මට්ටමේ බ්ලොක්බස්ටර් ක්‍රීඩා) YouTube වැනි අතුරු මුහුණතක. මෙහෙයුම් පද්ධතිය හෝ 2D/3D ග්‍රැෆික් නිර්මාණ යනාදී වෙනත් බැර නොබැඳි යෙදුම් සඳහාද එම ක්‍රමයම යෙදිය හැක. එමඟින් අපට ඒවා බහු වේදිකා හරහා අඩු පිරිවිතර උපාංග මත අඛණ්ඩව ධාවනය කළ හැකිය.

WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
මෙම තාක්ෂණයේ අනාගතය: මයික්‍රොසොෆ්ට් වින්ඩෝස් 10 ක්‍රෝම් බ්‍රවුසරයේ ක්‍රියාත්මක වූයේ දැයි සිතන්න.

වලාකුළු ක්‍රීඩා තාක්ෂණික වශයෙන් අභියෝගාත්මක ය

සූදු යනු නියත, වේගවත් පරිශීලක ප්‍රතිචාරයක් අවශ්‍ය වන දුර්ලභ ක්ෂේත්‍රවලින් එකකි. පිටුවක් මත ක්ලික් කිරීමේදී අපට ඉඳහිට තත්පර 2ක ප්‍රමාදයක් සිදු වුවහොත්, මෙය පිළිගත හැකිය. සජීවී වීඩියෝ ප්‍රවාහයන් තත්පර කිහිපයක් ප්‍රමාද වීමට නැඹුරු වන නමුත් තවමත් සාධාරණ උපයෝගීතාවයක් ලබා දෙයි. කෙසේ වෙතත්, ක්‍රීඩාව නිතර 500ms ප්‍රමාද වන්නේ නම්, එය ක්‍රීඩා කළ නොහැක. අපගේ ඉලක්කය වන්නේ ආදානය සහ මාධ්‍ය අතර පරතරය හැකිතාක් කුඩා වන පරිදි අතිශය අඩු ප්‍රමාදයක් ලබා ගැනීමයි. එබැවින් වීඩියෝ ප්‍රවාහය සඳහා සම්ප්‍රදායික ප්‍රවේශය මෙහි අදාළ නොවේ.

WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
සාමාන්‍ය වලාකුළු ක්‍රීඩා සැකිල්ල

විවෘත මූලාශ්‍ර ව්‍යාපෘතිය CloudRetro

මෙතරම් දැඩි ජාල සීමාවන් සමඟ මේ සියල්ල කළ හැකිද යන්න බැලීමට මම වලාකුළු ක්‍රීඩාවක පරීක්ෂණ නියැදියක් නිර්මාණය කිරීමට තීරණය කළෙමි. සංකල්ප ඔප්පු කිරීම සඳහා මම Golang තෝරා ගත්තේ එය මට වඩාත් හුරුපුරුදු භාෂාව වූ නිසාත්, පසුව මා සොයා ගත් පරිදි වෙනත් බොහෝ හේතූන් නිසා මෙම ක්‍රියාවට නැංවීම සඳහා ඉතා සුදුසු වූ නිසාත් ය. යන්න සරල වන අතර ඉතා ඉක්මනින් වර්ධනය වේ; බහු නූල් කළමනාකරණය සඳහා Go හි නාලිකා විශිෂ්ටයි.

ව්යාපෘති CloudRetro.io රෙට්රෝ ක්‍රීඩා සඳහා විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා සේවාවකි. ව්‍යාපෘතියේ පරමාර්ථය වන්නේ සම්ප්‍රදායික රෙට්‍රෝ ක්‍රීඩා සඳහා වඩාත් සුවපහසු ක්‍රීඩා අත්දැකීම ගෙන ඒම සහ බහු ක්‍රීඩකයන් එක් කිරීමයි.
ඔබට මෙහි ව්‍යාපෘතිය ගැන වැඩි විස්තර දැන ගත හැක: https://github.com/giongto35/cloud-game.

CloudRetro ක්‍රියාකාරීත්වය

CloudRetro ක්ලවුඩ් ක්‍රීඩා වල බලය ප්‍රදර්ශනය කිරීමට රෙට්රෝ ක්‍රීඩා භාවිතා කරයි. එය ඔබට බොහෝ අද්විතීය ක්‍රීඩා අත්දැකීම් ලබා ගැනීමට ඉඩ සලසයි.

  • ක්රීඩාවේ අතේ ගෙන යා හැකි හැකියාව
    • පිටුව විවෘත කිරීමේදී ක්ෂණික නැවත ධාවනය; බාගත කිරීම හෝ ස්ථාපනය කිරීම අවශ්ය නොවේ
    • ජංගම බ්‍රව්සරයක ක්‍රියා කරයි, එබැවින් එය ක්‍රියාත්මක කිරීමට මෘදුකාංග අවශ්‍ය නොවේ

  • ක්‍රීඩා සැසි බහුවිධ උපාංග හරහා බෙදා ගත හැකි අතර ඊළඟ වතාවේ ඔබ පුරන විට වලාකුළෙහි ගබඩා කළ හැක
  • ක්‍රීඩාව ප්‍රවාහ කළ හැකිය, නැතහොත් එය පරිශීලකයින් කිහිප දෙනෙකුට එකවර ක්‍රීඩා කළ හැකිය:
    • TwitchPlayPokemon වැනි Crowdplay, තවත් හරස් වේදිකා සහ තවත් තත්‍ය කාලීන පමණි
    • මාර්ගගත නොබැඳි ක්රීඩා. බොහෝ පරිශීලකයින්ට ජාලයක් සැකසීමෙන් තොරව සෙල්ලම් කළ හැකිය. සමුරායි ෂෝඩවුන් දැන් ක්ලවුඩ් රෙට්‍රෝ ජාලය හරහා ක්‍රීඩකයින් දෙදෙනෙකුට වාදනය කළ හැක

    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    විවිධ උපාංගවල සබැඳි බහු ක්‍රීඩක ක්‍රීඩාවේ ආදර්ශන අනුවාදය

    යටිතල පහසුකම්

    අවශ්‍යතා සහ තාක්‍ෂණ තොගය

    ව්‍යාපෘතිය ආරම්භ කිරීමට පෙර මා විසින් සකස් කරන ලද අවශ්‍යතා ලැයිස්තුවක් පහත දැක්වේ.

    1. එක් ක්රීඩකයෙක්
    මෙම අවශ්‍යතාවය මෙහි ඉතා වැදගත් හෝ පැහැදිලි ලෙස නොපෙනේ, නමුත් එය මගේ ප්‍රධාන පියවරයන්ගෙන් එකකි, එය ක්ලවුඩ් ක්‍රීඩා වලට සාම්ප්‍රදායික ප්‍රවාහ සේවා වලින් හැකිතාක් ඈත්ව සිටීමට ඉඩ සලසයි. අපි තනි ක්‍රීඩක ක්‍රීඩාවක් කෙරෙහි අවධානය යොමු කරන්නේ නම්, අපට මධ්‍යගත සේවාදායකයකින් හෝ CDN වලින් මිදිය හැකිය, මන්ද අපට ජනතාව අතරට ප්‍රවාහ කිරීමට අවශ්‍ය නැත. සින්ක් සේවාදායකයකට ප්‍රවාහ උඩුගත කිරීම හෝ මධ්‍යගත WebSocket සේවාදායකයකට පැකට් යැවීම වෙනුවට, සේවා ප්‍රවාහයන් peer-to-peer WebRTC සම්බන්ධතාවයක් හරහා පරිශීලකයා වෙත කෙලින්ම බෙදා හරිනු ලැබේ.

    2. අඩු ප්‍රමාද මාධ්‍ය ප්‍රවාහය
    Stadia ගැන කියවන විට, සමහර ලිපිවල WebRTC සඳහන් කර ඇති බව මම නිතර දකිමි. WebRTC යනු කැපී පෙනෙන තාක්‍ෂණයක් වන අතර එය ක්ලවුඩ් ක්‍රීඩා සඳහා පරිපූර්ණ බව මට වැටහුණි. WebRTC යනු සරල API හරහා තත්‍ය කාලීන සන්නිවේදනය සමඟ වෙබ් බ්‍රව්සර් සහ ජංගම යෙදුම් සපයන ව්‍යාපෘතියකි. එය peer-to-peer සම්බන්ධතාවයක් සපයයි, මාධ්‍ය සඳහා ප්‍රශස්ත කර ඇත, සහ VP8 සහ H264 වැනි සම්මත කෝඩෙක්ස් ඇත.

    උසස් තත්ත්වයේ ග්‍රැෆික්ස් නඩත්තු කිරීමට වඩා හැකි හොඳම පරිශීලක අත්දැකීම සහතික කිරීමට මම ප්‍රමුඛත්වය දුන්ෙමි. සමහර පාඩු ඇල්ගොරිතමයේ පිළිගත හැකිය. Google Stadia හට සේවාදායකයේ රූප ප්‍රමාණය අඩු කිරීමේ අමතර පියවරක් ඇති අතර, සම වයසේ මිතුරන් වෙත සම්ප්‍රේෂණය කිරීමට පෙර රාමු ඉහළ ගුණාත්මක භාවයට නංවා ඇත.

    3. භූගෝලීය මාර්ගගත කිරීම් සහිත බෙදා හරින ලද යටිතල පහසුකම්
    සම්පීඩන ඇල්ගොරිතම සහ කේතය කෙතරම් ප්‍රශස්ත වුවත්, ජාලය තවමත් ප්‍රමාදයට වඩාත්ම දායක වන තීරණාත්මක සාධකය වේ. වට-සංචාර කාලය (RTT) අඩු කිරීම සඳහා පරිශීලකයාට ආසන්නතම සේවාදායකය යුගල කිරීමට ගෘහ නිර්මාණ ශිල්පයට යාන්ත්‍රණයක් තිබිය යුතුය. ගෘහ නිර්මාණ ශිල්පයට සම්බන්ධීකාරක 1 ක් සහ ලොව පුරා බෙදා හරින ලද ප්‍රවාහ සේවාදායක කිහිපයක් තිබිය යුතුය: එක්සත් ජනපදය බටහිර, එක්සත් ජනපදය නැගෙනහිර, යුරෝපය, සිංගප්පූරුව, චීනය. සියලුම ප්‍රවාහ සේවාදායකයන් සම්පූර්ණයෙන්ම හුදකලා විය යුතුය. සේවාදායකයක් ජාලයට සම්බන්ධ වූ විට හෝ ඉවත් වූ විට පද්ධතියට එහි බෙදා හැරීම සකස් කළ හැකිය. මේ අනුව, විශාල තදබදයක් සහිතව, අතිරේක සේවාදායකයන් එකතු කිරීම තිරස් පරිමාණයට ඉඩ සලසයි.

    4. බ්‍රවුසර ගැළපුම
    ක්ලවුඩ් ක්‍රීඩා එය පරිශීලකයින්ගෙන් අවම වශයෙන් අවශ්‍ය වන විට එහි හොඳම වේ. මෙයින් අදහස් කරන්නේ එය බ්‍රව්සරයක ධාවනය කළ හැකි බවයි. බ්‍රවුසර් මඟින් ක්‍රීඩා අත්දැකීම පරිශීලකයින්ට හැකිතාක් සුවපහසු කිරීමට උදවු කරයි, මෘදුකාංග සහ දෘඪාංග ස්ථාපනය කිරීමෙන් ඔවුන් ඉතිරි කරයි. බ්‍රව්සර් ජංගම සහ ඩෙස්ක්ටොප් අනුවාද අතර හරස් වේදිකා ක්‍රියාකාරිත්වය සැපයීමට ද උදවු කරයි. වාසනාවකට මෙන්, WebRTC විවිධ බ්‍රව්සර් හරහා හොඳින් සහාය දක්වයි.

    5. ක්‍රීඩා අතුරුමුහුණත සහ සේවාව පැහැදිලිව වෙන් කිරීම
    මම වලාකුළු ක්‍රීඩා සේවාව වේදිකාවක් ලෙස දකිමි. ඕනෑම දෙයක් වේදිකාවට සම්බන්ධ කිරීමට සෑම කෙනෙකුටම හැකි විය යුතුය. දැන් මම ඒකාබද්ධ වී ඇත ලිබ්රෙට්රෝ SNES, GBA, PS වැනි රෙට්රෝ ක්‍රීඩා සඳහා LibRetro ලස්සන ක්‍රීඩා ඉමුලේටර් අතුරු මුහුණතක් ලබා දෙන නිසා Cloud gaming සේවාව සමඟින්.

    6. බහු ක්‍රීඩකයන් සඳහා කාමර, සමූහයා ක්‍රීඩා කිරීම සහ ක්‍රීඩාව සමඟ බාහිර සම්බන්ධ කිරීම (ගැඹුරු සබැඳිය).
    ක්‍රවුඩ්ප්ලේ සහ ඔන්ලයින් මල්ටිප්ලේයර් වැනි නව ක්‍රීඩා සඳහා CloudRetro සහාය දක්වයි. පරිශීලකයන් කිහිප දෙනෙකු විවිධ පරිගණකවල එකම ගැඹුරු සබැඳියක් විවෘත කළහොත්, ඔවුන් එකම ධාවන ක්‍රීඩාව දකින අතර එයට සම්බන්ධ වීමට පවා හැකි වේ.

    එපමණක් නොව, ක්‍රීඩා තත්වයන් වලාකුළු ගබඩාවේ ගබඩා කර ඇත. මෙය පරිශීලකයින්ට වෙනත් ඕනෑම උපාංගයක ඕනෑම වේලාවක දිගටම ක්‍රීඩා කිරීමට ඉඩ සලසයි.

    7. තිරස් පරිමාණය
    වර්තමානයේ ඕනෑම SAAS මෙන්, ක්ලවුඩ් ක්‍රීඩා තිරස් ලෙස පරිමාණය කිරීමට සැලසුම් කළ යුතුය. සම්බන්ධීකාරක-සේවක සැලසුම මඟින් ඔබට වැඩි ගමනාගමනය සඳහා තවත් සේවකයින් එකතු කිරීමට ඉඩ සලසයි.

    8. එක වලාකුළකට සම්බන්ධයක් නැත
    CloudRetro හි යටිතල පහසුකම් විවිධ කලාප සඳහා විවිධ වලාකුළු සපයන්නන් (ඩිජිටල් සාගරය, අලිබබා, අභිරුචි සපයන්නා) මත සත්කාරකත්වය සපයයි. මම යටිතල පහසුකම් සඳහා ඩොකර් කන්ටේනරයක ධාවනය සක්‍රීය කරන අතර තනි වලාකුළු සපයන්නෙකුට අගුලු දැමීම වළක්වා ගැනීමට bash ස්ක්‍රිප්ට් භාවිතයෙන් ජාල සැකසුම් වින්‍යාස කරමි. WebRTC හි NAT Traversal සමඟ මෙය ඒකාබද්ධ කිරීමෙන්, අපට ඕනෑම ක්ලවුඩ් වේදිකාවක් මත සහ ඕනෑම පරිශීලකයෙකුගේ යන්ත්‍රයක පවා CloudRetro යෙදවීමට නම්‍යශීලී විය හැක.

    ගෘහ නිර්මාණ සැලසුම්කරණය

    සේවකයා: (හෝ ඉහත සඳහන් කළ ප්‍රවාහ සේවාදායකය) ක්‍රීඩා ගුණ කරයි, කේතීකරණ නල මාර්ගය ධාවනය කරයි, සහ කේතනය කළ මාධ්‍ය පරිශීලකයින්ට ප්‍රවාහ කරයි. සේවක අවස්ථා ලොව පුරා බෙදා හැර ඇති අතර, සෑම සේවකයෙකුටම එකවර බහු පරිශීලක සැසි හැසිරවිය හැක.

    සම්බන්ධීකාරක: ප්‍රවාහය සඳහා වඩාත් සුදුසු සේවකයා සමඟ නව පරිශීලකයා යුගල කිරීම සඳහා වගකීම දරයි. WebSocket හරහා සම්බන්ධීකාරක කම්කරුවන් සමඟ අන්තර් ක්‍රියා කරයි.

    ක්‍රීඩා රාජ්‍ය ගබඩාව: සියලුම ක්‍රීඩා තත්වයන් සඳහා මධ්‍යම දුරස්ථ ආචයනය. මෙම ගබඩාව දුරස්ථ සුරැකීම/පූරණය වැනි වැදගත් කාර්යයන් සපයයි.

    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    CloudRetro හි ඉහළ මට්ටමේ ගෘහ නිර්මාණ ශිල්පය

    අභිරුචි පිටපත

    නව පරිශීලකයෙකු පහත රූපයේ පෙන්වා ඇති පියවර 1 සහ 2 හි CloudRetro විවෘත කළ විට, සම්බන්ධීකාරක සහ පවතින සේවකයින්ගේ ලැයිස්තුව පළමු පිටුවට ඉල්ලා සිටී. මෙයින් පසු, 3 පියවරේදී, සේවාදායකයා HTTP ping ඉල්ලීමක් භාවිතා කරමින් සියලුම අපේක්ෂකයින් සඳහා ප්‍රමාදයන් ගණනය කරයි. මෙම ප්‍රමාදයන් ලැයිස්තුව පසුව සම්බන්ධීකාරක වෙත යවනු ලබන අතර එමඟින් පරිශීලකයාට සේවය කිරීමට වඩාත් සුදුසු සේවකයා තීරණය කළ හැකිය. පහත පියවර 4 ක්‍රීඩාව නිර්මාණය කරයි. පරිශීලකයා සහ පවරා ඇති සේවකයා අතර WebRTC ප්‍රවාහ සම්බන්ධතාවයක් ස්ථාපිත කර ඇත.
    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    ප්‍රවේශය ලබා ගැනීමෙන් පසු පරිශීලක ස්ක්‍රිප්ට්

    සේවකයා තුළ ඇති දේ

    ක්‍රීඩා සහ ප්‍රවාහ නල මාර්ග සේවකයා තුළ හුදකලාවේ ගබඩා කර ඇති අතර අතුරු මුහුණත හරහා එහි තොරතුරු හුවමාරු කර ගනී. දැනට, මෙම සන්නිවේදනය සිදු කරනු ලබන්නේ මතකයේ දත්ත මාරු කිරීමෙනි Golang නාලිකා එකම ක්රියාවලිය තුළ. ඊළඟ ඉලක්කය වන්නේ වෙන් කිරීම, i.e. වෙනත් ක්‍රියාවලියක ක්‍රීඩාව ස්වාධීන දියත් කිරීම.

    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    සේවක සංරචකවල අන්තර්ක්රියා

    ප්රධාන සංරචක:

    • WebRTC: පරිශීලක ආදානය පිළිගන්නා සහ සේවාදායකයෙන් කේතනය කළ මාධ්‍ය ප්‍රතිදානය කරන සේවාදායක සංරචකයකි.
    • ක්‍රීඩා ඉමුලේටරය: ක්රීඩා සංරචකය. Libretro පුස්තකාලයට ස්තූතිවන්ත වන අතර, එම ක්‍රියාවලිය තුළම ක්‍රීඩාව ධාවනය කිරීමට සහ මාධ්‍ය සහ ආදාන ප්‍රවාහය අභ්‍යන්තරව බාධා කිරීමට පද්ධතියට හැකි වේ.
    • ක්‍රීඩාව තුළ රාමු ග්‍රහණය කර කේතකය වෙත යවනු ලැබේ.
    • රූපය/ශ්‍රව්‍ය සංකේතකය: මාධ්‍ය රාමු ගෙන ඒවා පසුබිමේ කේතනය කරන සහ කේතනය කළ රූප/ශ්‍රව්‍ය ප්‍රතිදානය කරන කේතීකරණ නල මාර්ගයකි.

    Реализация

    CloudRetro එහි කොඳු නාරටිය තාක්‍ෂණය ලෙස WebRTC මත රඳා පවතී, එබැවින් Golang ක්‍රියාත්මක කිරීම පිළිබඳ විස්තර වෙත කිමිදීමට පෙර, WebRTC ගැනම කතා කිරීමට මම තීරණය කළෙමි. මෙය දත්ත ප්‍රවාහය සඳහා උප-දෙවන ප්‍රමාදය සාක්ෂාත් කර ගැනීමට මට බෙහෙවින් උපකාර වූ විශ්මිත තාක්‍ෂණයකි.

    WebRTC

    WebRTC නිර්මාණය කර ඇත්තේ සරල API භාවිතා කරමින් ස්වදේශීය ජංගම යෙදුම් සහ බ්‍රවුසරවල උසස් තත්ත්වයේ සම-පහළ සම්බන්ධතා සැපයීමටය.

    NAT Traversal

    WebRTC එහි NAT Traversal ක්‍රියාකාරීත්වය සඳහා ප්‍රසිද්ධය. WebRTC නිර්මාණය කර ඇත්තේ peer-to-peer සන්නිවේදනය සඳහා ය. එහි පරමාර්ථය නම් ක්‍රියාවලියක් හරහා සම-සම සන්නිවේදනය සඳහා NAT ගේට්වේ සහ ෆයර්වෝල් මඟහැර වඩාත් සුදුසු සෘජු මාර්ගය සොයා ගැනීමයි. අයිස්ක්රීම්. මෙම ක්‍රියාවලියේ කොටසක් ලෙස, WebRTC API STUN සේවාදායකයන් භාවිතයෙන් ඔබේ පොදු IP ලිපිනය සොයාගෙන එය රිලේ සේවාදායකය වෙත යොමු කරයි (ටර්න් කරන්න) සෘජු සම්බන්ධතාවයක් ස්ථාපිත කළ නොහැකි විට.

    කෙසේ වෙතත්, CloudRetro මෙම විශේෂාංගය සම්පූර්ණයෙන්ම භාවිතා නොකරයි. එහි peer-to-peer සම්බන්ධතා පවතින්නේ පරිශීලකයන් අතර නොව, පරිශීලකයන් සහ වලාකුළු සේවාදායකයන් අතරය. ආකෘතියේ සේවාදායක පැත්තට සාමාන්‍ය පරිශීලක උපාංගයකට වඩා සෘජු සන්නිවේදන සීමා කිරීම් අඩුය. සේවාදායකය NAT ට පිටුපසින් නොමැති බැවින්, පැමිණෙන වරායන් පෙර-විවෘත කිරීමට හෝ පොදු IP ලිපින සෘජුවම භාවිතා කිරීමට මෙය ඔබට ඉඩ සලසයි.

    මින් පෙර, Cloud Gaming සඳහා ව්‍යාපෘතිය ක්‍රීඩා බෙදාහැරීමේ වේදිකාවක් බවට පත් කිරීමට මට අවශ්‍ය විය. අදහස වූයේ ක්‍රීඩා නිර්මාණකරුවන්ට ක්‍රීඩා සහ ප්‍රවාහ සම්පත් සැපයීමට ඉඩ දීමයි. පරිශීලකයන් සෘජුවම සපයන්නන් සමඟ අන්තර් ක්‍රියා කරයි. මෙම විමධ්‍යගත ආකාරයෙන්, CloudRetro යනු පරිශීලකයින්ට තෙවන පාර්ශවීය ප්‍රවාහ සම්පත් සම්බන්ධ කිරීමේ රාමුවක් පමණක් වන අතර එය තවදුරටත් සත්කාරක නොවන විට එය වඩාත් පරිමාණය කළ හැකිය. මෙහි WebRTC NAT Traversal හි කාර්යභාරය තෙවන පාර්ශවීය ප්‍රවාහ සම්පත් මත සම වයසේ සිට සම වයසේ සම්බන්ධතා ආරම්භ කිරීම පහසු කිරීම සඳහා ඉතා වැදගත් වන අතර, නිර්මාණකරුට ජාලයට සම්බන්ධ වීම පහසු කරයි.

    වීඩියෝ සම්පීඩනය

    වීඩියෝ සම්පීඩනය නල මාර්ගයේ අත්යවශ්ය අංගයක් වන අතර එය සුමට ප්රවාහයක් සඳහා බෙහෙවින් දායක වේ. VP8/H264 වීඩියෝ කේතීකරණයේ සෑම විස්තරයක්ම දැනගැනීම අවශ්‍ය නොවන අතර, සංකල්ප තේරුම් ගැනීමෙන් ඔබට ප්‍රවාහ වීඩියෝ වේග විකල්ප තේරුම් ගැනීමට, අනපේක්ෂිත හැසිරීම් දෝෂහරණය කිරීමට සහ ප්‍රමාදය සකස් කිරීමට උපකාරී වේ.

    ප්‍රවාහ සේවාවක් සඳහා වීඩියෝව සම්පීඩනය කිරීම අභියෝගාත්මක වන්නේ ඇල්ගොරිතම මඟින් සම්පූර්ණ කේතීකරණ කාලය + ජාල සම්ප්‍රේෂණ කාලය + විකේතන කාලය හැකිතාක් අඩු බව සහතික කළ යුතු බැවිනි. මීට අමතරව, කේතීකරණ ක්රියාවලිය ස්ථාවර හා අඛණ්ඩ විය යුතුය. සමහර කේතීකරණ හුවමාරු කිරීම් අදාළ නොවේ-උදාහරණයක් ලෙස, අපට කුඩා ගොනු ප්‍රමාණයන් සහ විකේතනය කිරීමේ වේලාවන්ට වඩා දිගු කේතන වේලාවන්ට අනුග්‍රහය දැක්විය නොහැක, නැතහොත් නොගැලපෙන සම්පීඩනය භාවිතා කළ නොහැක.

    වීඩියෝ සම්පීඩනය පිටුපස ඇති අදහස වන්නේ පරිශීලකයින් සඳහා පිළිගත හැකි මට්ටමේ නිරවද්‍යතාවයක් පවත්වා ගනිමින් අනවශ්‍ය තොරතුරු බිටු ඉවත් කිරීමයි. තනි ස්ථිතික රූප රාමු කේතනය කිරීමට අමතරව, ඇල්ගොරිතම මඟින් වත්මන් රාමුව පෙර සහ ඊළඟ ඒවායින් අනුමාන කරයි, එබැවින් ඒවායේ වෙනස පමණක් යවනු ලැබේ. Pacman සමඟ උදාහරණයෙන් දැකිය හැකි පරිදි, අවකල ලක්ෂ්ය පමණක් සම්ප්රේෂණය වේ.

    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    උදාහරණයක් ලෙස Pacman භාවිතා කරන වීඩියෝ රාමු සංසන්දනය කිරීම

    ශ්රව්ය සම්පීඩනය

    ඒ හා සමානව, ශ්‍රව්‍ය සම්පීඩන ඇල්ගොරිතම මිනිසුන්ට වටහා ගත නොහැකි දත්ත මඟ හැරේ. Opus දැනට හොඳම ක්‍රියාකාරී ශ්‍රව්‍ය කෝඩෙක් වේ. එය නිර්මාණය කර ඇත්තේ RTP (Real Time Transport Protocol) වැනි ඇණවුම් කළ දත්ත ග්‍රෑම් ප්‍රොටෝකෝලයක් හරහා ශ්‍රව්‍ය තරංගයක් සම්ප්‍රේෂණය කිරීමටය. එහි ප්‍රමාදය mp3 සහ aac වලට වඩා අඩු වන අතර ගුණාත්මක භාවය වැඩි වේ. ප්‍රමාදය සාමාන්‍යයෙන් 5~66,5ms පමණ වේ.

    Pion, Golang හි WebRTC

    උකස් WebRTC Golang වෙත ගෙන එන විවෘත මූලාශ්‍ර ව්‍යාපෘතියකි. ස්වදේශීය C++ WebRTC පුස්තකාලවල සාමාන්‍ය එතීම වෙනුවට, Pion යනු WebRTC ප්‍රොටෝකෝල මත වඩා හොඳ කාර්ය සාධනය, Go ඒකාබද්ධ කිරීම සහ අනුවාද පාලනය සමඟ WebRTC හි දේශීය Golang ක්‍රියාත්මක කිරීමකි.

    පුස්තකාලය උප-දෙවන ප්‍රමාදය සමඟ විශාල ගොඩනඟන ලද ප්‍රවාහයක් ද සක්‍රීය කරයි. එයට STUN, DTLS, SCTP යනාදිය තමන්ගේම ක්‍රියාත්මක කිරීමක් ඇත. සහ QUIC සහ WebAssembly සමඟ සමහර අත්හදා බැලීම්. මෙම විවෘත මූලාශ්‍ර පුස්තකාලය විශිෂ්ට ලියකියවිලි, ජාල ප්‍රොටෝකෝල ක්‍රියාත්මක කිරීම් සහ සිසිල් උදාහරණ සහිත ඇත්තෙන්ම හොඳ ඉගෙනුම් සම්පතකි.

    ඉතා උද්යෝගිමත් නිර්මාපකයෙකු විසින් මෙහෙයවනු ලබන Pion ප්‍රජාව, WebRTC පිළිබඳව ගුණාත්මක සාකච්ඡා රාශියක් සිදුවෙමින් පවතින අතර, තරමක් සජීවී ය. ඔබ මෙම තාක්ෂණය ගැන උනන්දුවක් දක්වන්නේ නම්, එක්වන්න http://pion.ly/slack - ඔබ බොහෝ නව දේවල් ඉගෙන ගනු ඇත.

    Golang හි CloudRetro ලිවීම

    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    Go හි සේවකයෙකු ක්රියාත්මක කිරීම

    ක්‍රියාත්මක වන නාලිකා යන්න

    Go හි අලංකාර නාලිකා සැලසුමට ස්තූතිවන්ත වන අතර, සිදුවීම් ප්‍රවාහයේ සහ සමගාමීත්වයේ ගැටළු බොහෝ සෙයින් සරල කර ඇත. රූප සටහනේ මෙන්, විවිධ GoRoutines සමාන්තරව ධාවනය වන බහු සංරචක ඇත. සෑම සංරචකයක්ම එහි තත්වය කළමනාකරණය කරන අතර නාලිකා හරහා සන්නිවේදනය කරයි. Golang ගේ වරණාත්මක ප්‍රකාශය ක්‍රීඩාවේ සෑම අවස්ථාවකම එක් පරමාණුක සිදුවීමක් සැකසීමට බල කරයි (ක්‍රීඩා ටික්). මෙයින් අදහස් කරන්නේ මෙම සැලසුම සඳහා අගුලු දැමීම අවශ්ය නොවන බවයි. උදාහරණයක් ලෙස, පරිශීලකයෙකු සුරකින විට, ක්‍රීඩා තත්ත්වය පිළිබඳ සම්පූර්ණ ඡායාරූපයක් අවශ්‍ය වේ. සුරැකීම සම්පූර්ණ වන තෙක් මෙම තත්වය අඛණ්ඩව පැවතිය යුතුය. එක් එක් ක්‍රීඩා ටික් එක අතරතුර, පසුපෙළට හැසිරවිය හැක්කේ සුරැකීමේ හෝ ආදාන ක්‍රියාවක් පමණක් වන අතර, ක්‍රියාවලි නූල් ආරක්ෂිත කරයි.

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

    Fan-in/Fan-out

    මෙම Golang අච්චුව මගේ CrowdPlay සහ Multiple Player භාවිත අවස්ථාවට හොඳින් ගැලපේ. මෙම රටාව අනුගමනය කරමින්, එක් කාමරයක ඇති සියලුම පරිශීලක යෙදවුම් මධ්‍යම පිවිසුම් නාලිකාවට ගොඩනගා ඇත. ක්‍රීඩා මාධ්‍ය පසුව එකම කාමරයේ සිටින සියලුම පරිශීලකයින් වෙත යොදවනු ලැබේ. මේ ආකාරයෙන්, අපි විවිධ පරිශීලකයින්ගේ ක්‍රීඩා සැසි කිහිපයක් අතර ක්‍රීඩා තත්ත්වය බෙදීම සාක්ෂාත් කර ගනිමු.

    WebRTC හි විවෘත මූලාශ්‍ර ක්ලවුඩ් ක්‍රීඩා: p2p, බහු ක්‍රීඩක, ශුන්‍ය ප්‍රමාදය
    විවිධ සැසි අතර සමමුහුර්තකරණය

    Golang හි අවාසි

    Golang පරිපූර්ණ නොවේ. නාලිකාව මන්දගාමී වේ. අවහිර කිරීම හා සසඳන විට, Go නාලිකාව සමගාමී සහ ත්‍රෙඩ් සිදුවීම් හැසිරවීමට පහසු ක්‍රමයකි, නමුත් නාලිකාව හොඳම කාර්ය සාධනය සපයන්නේ නැත. නාලිකාවට යටින් සංකීර්ණ අවහිර කිරීමේ තර්කයක් ඇත. එබැවින් මම ක්‍රියාත්මක කිරීම සඳහා යම් යම් ගැලපීම් සිදු කළෙමි, කාර්ය සාධනය ප්‍රශස්ත කිරීම සඳහා නාලිකා ප්‍රතිස්ථාපනය කිරීමේදී අගුල් සහ පරමාණුක අගයන් නැවත යෙදීම.

    මීට අමතරව, Golang හි කසළ එකතු කරන්නා කළමනාකරණය නොකරන අතර, සමහර විට එය සැක සහිත දිගු විරාමයන් ඇති කරයි. මෙය තත්‍ය කාලීන ප්‍රවාහ යෙදුමට බෙහෙවින් බාධා කරයි.

    COG

    ව්‍යාපෘතිය මාධ්‍ය සම්පීඩනය සඳහා පවතින විවෘත මූලාශ්‍ර Golang VP8/H264 පුස්තකාලය සහ ක්‍රීඩා ඉමුලේටර් සඳහා Libretro භාවිතා කරයි. මෙම පුස්තකාල සියල්ලම Go භාවිතා කරන C පුස්තකාලයේ දවටන වේ COG. අවාසි සමහරක් ලැයිස්තුගත කර ඇත මෙම සටහන ඩේව් චෙනී විසිනි. මා මුහුණ දුන් ගැටළු:

    • Golang RecoveryCrash සමඟ පවා CGO හි බිඳ වැටීමක් අල්ලා ගැනීමට නොහැකි වීම;
    • CGO හි සවිස්තරාත්මක ගැටළු හඳුනා ගැනීමට අපට නොහැකි වූ විට කාර්ය සාධන බාධක හඳුනා ගැනීමට අසමත් වීම.

    නිගමනය

    මම ක්ලවුඩ් ක්‍රීඩා සේවා අවබෝධ කර ගැනීමේ සහ මගේ මිතුරන් සමඟ සබැඳිව විස්මිත රෙට්රෝ ක්‍රීඩා කිරීමට උදවු කරන වේදිකාවක් නිර්මාණය කිරීමේ මගේ ඉලක්කය සපුරා ගත්තෙමි. Pion පුස්තකාලය සහ Pion ප්‍රජාවගේ සහයෝගය නොමැතිව මෙම ව්‍යාපෘතිය කළ නොහැකි වනු ඇත. එහි තීව්‍ර සංවර්ධනය සඳහා මම අතිශයින්ම කෘතඥ වෙමි. WebRTC සහ Pion විසින් සපයන ලද සරල APIs බාධාවකින් තොරව ඒකාබද්ධ කිරීම සහතික කරයි. peer-to-peer (P2P) සන්නිවේදනය පිළිබඳව මට පූර්ව දැනුමක් නොතිබුණද, එම සතියේම මගේ සංකල්පය පිළිබඳ පළමු සාක්ෂිය නිකුත් විය.

    ඒකාබද්ධ කිරීමේ පහසුව තිබියදීත්, P2P ප්‍රවාහය ඇත්තෙන්ම පරිගණක විද්‍යාවේ ඉතා සංකීර්ණ ක්ෂේත්‍රයකි. සම වයසේ සිට සම වයසේ සැසියක් නිර්මාණය කිරීම සඳහා IP සහ NAT වැනි දිගුකාලීන ජාල ගෘහ නිර්මාණ ශිල්පයේ සංකීර්ණත්වය සමඟ කටයුතු කිරීමට ඇයට සිදුවේ. මෙම ව්‍යාපෘතියේ වැඩ කරන අතරතුර, මම ජාලකරණය සහ කාර්ය සාධන ප්‍රශස්තකරණය පිළිබඳ වටිනා දැනුමක් ලබා ගත්තෙමි, එබැවින් WebRTC භාවිතයෙන් P2P නිෂ්පාදන තැනීමට උත්සාහ කරන ලෙස මම සියලු දෙනා දිරිමත් කරමි.

    CloudRetro ප්‍රත්‍යක්ෂ ක්‍රීඩකයෙකු ලෙස මගේ ඉදිරිදර්ශනයෙන් මා බලාපොරොත්තු වූ සියලුම භාවිත අවස්ථා සඳහා සපයයි. කෙසේ වෙතත්, ජාලය වඩාත් විශ්වාසදායක සහ කාර්ය සාධනය කිරීම, උසස් තත්ත්වයේ ක්‍රීඩා ග්‍රැෆික්ස් සැපයීම හෝ පරිශීලකයින් අතර ක්‍රීඩා බෙදා ගැනීමේ හැකියාව වැනි මට වැඩිදියුණු කළ හැකි බොහෝ ක්ෂේත්‍ර ව්‍යාපෘතියේ ඇතැයි මම සිතමි. මම මේ සඳහා වෙහෙස මහන්සි වී වැඩ කරනවා. කරුණාකර අනුගමනය කරන්න ව්යාපෘතිය සහ ඔබ එයට කැමති නම් එයට සහාය වන්න.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න