ప్రోహోస్టర్ > బ్లాగ్ > పరిపాలన > WebRTCలో ఓపెన్ సోర్స్ క్లౌడ్ గేమింగ్: p2p, మల్టీప్లేయర్, జీరో లేటెన్సీ
WebRTCలో ఓపెన్ సోర్స్ క్లౌడ్ గేమింగ్: p2p, మల్టీప్లేయర్, జీరో లేటెన్సీ
సాఫ్ట్వేర్ను సేవగా, మౌలిక సదుపాయాలను సేవగా, ప్లాట్ఫారమ్ను సేవగా, కమ్యూనికేషన్ ప్లాట్ఫారమ్ను సేవగా, వీడియో కాన్ఫరెన్సింగ్ సేవగా, క్లౌడ్ గేమింగ్ను సేవగా ఎలా చెప్పాలి? Google ఇటీవల ప్రారంభించిన Stadia వంటి క్లౌడ్ గేమింగ్ (క్లౌడ్ గేమింగ్)ని రూపొందించడానికి ఇప్పటికే అనేక ప్రయత్నాలు జరిగాయి. స్టేడియా WebRTCకి కొత్తది కాదు, అయితే ఇతరులు అదే విధంగా WebRTCని ఉపయోగించవచ్చా?
Thanh Nguyen తన ఓపెన్ సోర్స్ ప్రాజెక్ట్ CloudRetroలో ఈ అవకాశాన్ని పరీక్షించాలని నిర్ణయించుకున్నాడు. CloudRetro Pion ఆధారంగా రూపొందించబడింది, ప్రజాదరణ పొందింది Go ఆధారంగా WebRTC లైబ్రరీ (ధన్యవాదాలు చూపబడింది ఈ కథనాన్ని సిద్ధం చేయడంలో వారి సహాయం కోసం పియోన్ డెవలప్మెంట్ బృందం నుండి). ఈ ఆర్టికల్లో, థాన్ తన ప్రాజెక్ట్ యొక్క ఆర్కిటెక్చర్ యొక్క అవలోకనాన్ని అందించాడు మరియు అతను నేర్చుకున్న ఉపయోగకరమైన విషయాలు మరియు అతని పని సమయంలో అతను ఎదుర్కొన్న సవాళ్ల గురించి కూడా మాట్లాడాడు.
ఎంట్రీ
గత సంవత్సరం, గూగుల్ స్టేడియాని ప్రకటించినప్పుడు, అది నా మనసును కదిలించింది. ఆలోచన చాలా ప్రత్యేకమైనది మరియు వినూత్నమైనది, ఇది ఇప్పటికే ఉన్న సాంకేతికతతో కూడా ఎలా సాధ్యమైందని నేను నిరంతరం ఆలోచిస్తున్నాను. ఈ అంశాన్ని బాగా అర్థం చేసుకోవాలనే కోరిక, ఓపెన్ సోర్స్ క్లౌడ్ గేమ్ యొక్క నా స్వంత వెర్షన్ను రూపొందించడానికి నన్ను ప్రేరేపించింది. ఫలితం కేవలం అద్భుతమైనది. క్రింద నేను నా సంవత్సరంలో పని చేసే విధానాన్ని భాగస్వామ్యం చేయాలనుకుంటున్నాను ప్రాజెక్ట్.
TLDR: ముఖ్యాంశాలతో కూడిన చిన్న స్లయిడ్ వెర్షన్
క్లౌడ్ గేమింగ్ ఎందుకు భవిష్యత్తు
క్లౌడ్ గేమింగ్ త్వరలో గేమింగ్ మాత్రమే కాకుండా కంప్యూటర్ సైన్స్లోని ఇతర రంగాలలో కూడా తదుపరి తరం అవుతుందని నేను నమ్ముతున్నాను. క్లౌడ్ గేమింగ్ అనేది క్లయింట్/సర్వర్ మోడల్కు పరాకాష్ట. ఈ మోడల్ రిమోట్ సర్వర్లో గేమ్ లాజిక్ని హోస్ట్ చేయడం మరియు క్లయింట్కు ఇమేజ్లు/ఆడియోను ప్రసారం చేయడం ద్వారా బ్యాకెండ్ మేనేజ్మెంట్ను గరిష్టం చేస్తుంది మరియు ఫ్రంటెండ్ పనిని తగ్గిస్తుంది. సర్వర్ భారీ ప్రాసెసింగ్ను చేస్తుంది కాబట్టి క్లయింట్ హార్డ్వేర్ పరిమితుల దయతో ఉండదు.
Google Stadia తప్పనిసరిగా మీరు ఆడటానికి అనుమతిస్తుంది AAA ఆటలు YouTube వంటి ఇంటర్ఫేస్లో (అంటే హై-ఎండ్ బ్లాక్బస్టర్ గేమ్లు). ఆపరేటింగ్ సిస్టమ్ లేదా 2D/3D గ్రాఫిక్ డిజైన్ మొదలైన ఇతర భారీ ఆఫ్లైన్ అప్లికేషన్లకు కూడా అదే పద్ధతిని అన్వయించవచ్చు. తద్వారా మేము వాటిని బహుళ ప్లాట్ఫారమ్లలో తక్కువ-స్పెక్ పరికరాలలో స్థిరంగా అమలు చేయగలము.
ఈ సాంకేతికత యొక్క భవిష్యత్తు: మైక్రోసాఫ్ట్ విండోస్ 10 క్రోమ్ బ్రౌజర్లో నడుస్తుందో లేదో ఊహించుకోండి?
క్లౌడ్ గేమింగ్ సాంకేతికంగా సవాలుగా ఉంది
స్థిరమైన, వేగవంతమైన వినియోగదారు ప్రతిస్పందన అవసరమయ్యే అరుదైన ప్రాంతాలలో గేమింగ్ ఒకటి. పేజీపై క్లిక్ చేసేటప్పుడు మనం అప్పుడప్పుడు 2 సెకన్ల ఆలస్యాన్ని ఎదుర్కొంటే, ఇది ఆమోదయోగ్యమైనది. లైవ్ వీడియో స్ట్రీమ్లు కొన్ని సెకన్ల ఆలస్యంగా ఉంటాయి, కానీ ఇప్పటికీ సహేతుకమైన వినియోగాన్ని అందిస్తాయి. అయితే, గేమ్ తరచుగా 500ms వెనుకబడి ఉంటే, అది ఆడలేనిది. ఇన్పుట్ మరియు మీడియా మధ్య గ్యాప్ వీలైనంత తక్కువగా ఉండేలా చాలా తక్కువ జాప్యాన్ని సాధించడం మా లక్ష్యం. కాబట్టి, వీడియో స్ట్రీమింగ్కు సంప్రదాయ విధానం ఇక్కడ వర్తించదు.
సాధారణ క్లౌడ్ గేమ్ టెంప్లేట్
ఓపెన్ సోర్స్ ప్రాజెక్ట్ CloudRetro
ఇలాంటి కఠినమైన నెట్వర్క్ పరిమితులతో ఇవన్నీ సాధ్యమేనా అని చూడటానికి నేను క్లౌడ్ గేమ్ యొక్క పరీక్ష నమూనాను రూపొందించాలని నిర్ణయించుకున్నాను. నేను భావన యొక్క రుజువు కోసం గోలాంగ్ని ఎంచుకున్నాను ఎందుకంటే ఇది నాకు బాగా తెలిసిన భాష మరియు అనేక ఇతర కారణాల వల్ల ఈ అమలుకు బాగా సరిపోతుంది, నేను తరువాత కనుగొన్నాను. గో సులభం మరియు చాలా త్వరగా అభివృద్ధి చెందుతుంది; మల్టీథ్రెడింగ్ని నిర్వహించడానికి Goలోని ఛానెల్లు గొప్పవి.
ప్రాజెక్ట్ CloudRetro.io రెట్రో గేమింగ్ కోసం ఓపెన్ సోర్స్ క్లౌడ్ గేమింగ్ సర్వీస్. సాంప్రదాయ రెట్రో గేమ్లకు అత్యంత సౌకర్యవంతమైన గేమింగ్ అనుభవాన్ని అందించడం మరియు మల్టీప్లేయర్ను జోడించడం ప్రాజెక్ట్ యొక్క లక్ష్యం.
మీరు ఇక్కడ ప్రాజెక్ట్ గురించి మరింత తెలుసుకోవచ్చు: https://github.com/giongto35/cloud-game.
CloudRetro కార్యాచరణ
క్లౌడ్ గేమింగ్ యొక్క శక్తిని ప్రదర్శించడానికి CloudRetro రెట్రో గేమ్లను ఉపయోగిస్తుంది. ఇది అనేక ప్రత్యేకమైన గేమింగ్ అనుభవాలను పొందడానికి మిమ్మల్ని అనుమతిస్తుంది.
ఆట యొక్క పోర్టబిలిటీ
పేజీని తెరిచేటప్పుడు తక్షణ ప్లేబ్యాక్; డౌన్లోడ్ లేదా ఇన్స్టాలేషన్ అవసరం లేదు
మొబైల్ బ్రౌజర్లో పని చేస్తుంది, కాబట్టి దీన్ని అమలు చేయడానికి సాఫ్ట్వేర్ అవసరం లేదు
గేమ్ సెషన్లు బహుళ పరికరాలలో భాగస్వామ్యం చేయబడతాయి మరియు మీరు తదుపరిసారి లాగిన్ చేయడానికి క్లౌడ్లో నిల్వ చేయబడతాయి
ఆటను ప్రసారం చేయవచ్చు లేదా ఒకేసారి అనేక మంది వినియోగదారులు ఆడవచ్చు:
TwitchPlayPokemon వంటి క్రౌడ్ప్లే, మరింత క్రాస్-ప్లాట్ఫారమ్ మరియు మరింత నిజ సమయంలో మాత్రమే
ఆఫ్లైన్ గేమ్లు ఆన్లైన్. చాలా మంది వినియోగదారులు నెట్వర్క్ని సెటప్ చేయకుండా ప్లే చేయవచ్చు. సమురాయ్ షోడౌన్ ఇప్పుడు క్లౌడ్రెట్రో నెట్వర్క్లో 2 ప్లేయర్లు ప్లే చేయవచ్చు
వివిధ పరికరాల్లో ఆన్లైన్ మల్టీప్లేయర్ గేమ్ డెమో వెర్షన్
మౌలిక
అవసరాలు మరియు సాంకేతికత స్టాక్
ప్రాజెక్ట్ను ప్రారంభించే ముందు నేను సెట్ చేసిన అవసరాల జాబితా క్రింద ఉంది.
1. ఒక ఆటగాడు
ఈ ఆవశ్యకత ఇక్కడ చాలా ముఖ్యమైనదిగా లేదా స్పష్టంగా కనిపించకపోవచ్చు, కానీ ఇది నా కీలకమైన వాటిలో ఒకటి, ఇది సంప్రదాయ స్ట్రీమింగ్ సేవలకు వీలైనంత దూరంగా ఉండటానికి క్లౌడ్ గేమింగ్ను అనుమతిస్తుంది. మేము సింగిల్ ప్లేయర్ గేమ్పై దృష్టి సారిస్తే, మేము కేంద్రీకృత సర్వర్ లేదా CDNని వదిలించుకోవచ్చు ఎందుకంటే మనం జనాలకు ప్రసారం చేయవలసిన అవసరం లేదు. సింక్ సర్వర్కు స్ట్రీమ్లను అప్లోడ్ చేయడానికి లేదా కేంద్రీకృత వెబ్సాకెట్ సర్వర్కు ప్యాకెట్లను పంపడానికి బదులుగా, సేవా ప్రసారాలు నేరుగా పీర్-టు-పీర్ WebRTC కనెక్షన్ ద్వారా వినియోగదారుకు పంపిణీ చేయబడతాయి.
2. తక్కువ జాప్యం మీడియా స్ట్రీమ్
Stadia గురించి చదువుతున్నప్పుడు, కొన్ని కథనాలలో WebRTC ప్రస్తావించడాన్ని నేను తరచుగా చూస్తాను. WebRTC ఒక అత్యుత్తమ సాంకేతికత అని మరియు క్లౌడ్ గేమింగ్లో ఉపయోగించడానికి ఇది సరైనదని నేను గ్రహించాను. WebRTC అనేది సాధారణ API ద్వారా నిజ-సమయ కమ్యూనికేషన్తో వెబ్ బ్రౌజర్లు మరియు మొబైల్ అప్లికేషన్లను అందించే ప్రాజెక్ట్. ఇది పీర్-టు-పీర్ కనెక్టివిటీని అందిస్తుంది, మీడియా కోసం ఆప్టిమైజ్ చేయబడింది మరియు VP8 మరియు H264 వంటి అంతర్నిర్మిత ప్రామాణిక కోడెక్లను కలిగి ఉంది.
అధిక నాణ్యత గల గ్రాఫిక్లను నిర్వహించడం కంటే సాధ్యమైనంత ఉత్తమమైన వినియోగదారు అనుభవాన్ని నిర్ధారించడానికి నేను ప్రాధాన్యతనిచ్చాను. అల్గోరిథంలో కొన్ని నష్టాలు ఆమోదయోగ్యమైనవి. Google Stadia సర్వర్లో చిత్ర పరిమాణాన్ని తగ్గించే అదనపు దశను కలిగి ఉంది మరియు ఫ్రేమ్లు పీర్లకు ప్రసారం చేయడానికి ముందు అధిక నాణ్యతకు పెంచబడతాయి.
3. భౌగోళిక రూటింగ్తో పంపిణీ చేయబడిన మౌలిక సదుపాయాలు
కంప్రెషన్ అల్గారిథమ్ మరియు కోడ్ ఎంత ఆప్టిమైజ్ చేయబడినప్పటికీ, నెట్వర్క్ ఇప్పటికీ జాప్యానికి అత్యంత దోహదపడే నిర్ణయాత్మక అంశం. రౌండ్-ట్రిప్ సమయాన్ని (RTT) తగ్గించడానికి వినియోగదారుకు దగ్గరగా ఉన్న సర్వర్ను జత చేయడానికి ఆర్కిటెక్చర్ తప్పనిసరిగా మెకానిజం కలిగి ఉండాలి. ఆర్కిటెక్చర్ తప్పనిసరిగా 1 సమన్వయకర్త మరియు ప్రపంచవ్యాప్తంగా పంపిణీ చేయబడిన అనేక స్ట్రీమింగ్ సర్వర్లను కలిగి ఉండాలి: US వెస్ట్, US ఈస్ట్, యూరప్, సింగపూర్, చైనా. అన్ని స్ట్రీమింగ్ సర్వర్లు పూర్తిగా వేరుచేయబడి ఉండాలి. సర్వర్ నెట్వర్క్లో చేరినప్పుడు లేదా నిష్క్రమించినప్పుడు సిస్టమ్ దాని పంపిణీని సర్దుబాటు చేయగలదు. అందువల్ల, అధిక ట్రాఫిక్తో, అదనపు సర్వర్లను జోడించడం క్షితిజ సమాంతర స్కేలింగ్ను అనుమతిస్తుంది.
4. బ్రౌజర్ అనుకూలత
క్లౌడ్ గేమింగ్ వినియోగదారుల నుండి కనీసం అవసరమైనప్పుడు ఉత్తమంగా ఉంటుంది. అంటే బ్రౌజర్లో రన్ చేయడం సాధ్యమవుతుంది. సాఫ్ట్వేర్ మరియు హార్డ్వేర్లను ఇన్స్టాల్ చేయకుండా సేవ్ చేయడం ద్వారా వినియోగదారులకు గేమింగ్ అనుభవాన్ని వీలైనంత సౌకర్యవంతంగా చేయడానికి బ్రౌజర్లు సహాయపడతాయి. మొబైల్ మరియు డెస్క్టాప్ వెర్షన్ల మధ్య క్రాస్-ప్లాట్ఫారమ్ కార్యాచరణను అందించడంలో కూడా బ్రౌజర్లు సహాయపడతాయి. అదృష్టవశాత్తూ, WebRTCకి వివిధ బ్రౌజర్లలో మంచి మద్దతు ఉంది.
5. గేమ్ ఇంటర్ఫేస్ మరియు సేవ యొక్క స్పష్టమైన విభజన
నేను క్లౌడ్ గేమింగ్ సేవను వేదికగా చూస్తున్నాను. ప్రతి ఒక్కరూ ప్లాట్ఫారమ్కు ఏదైనా కనెక్ట్ చేయగలగాలి. ఇప్పుడు నేను ఏకీకృతం చేసాను LibRetro క్లౌడ్ గేమింగ్ సేవతో ఎందుకంటే LibRetro SNES, GBA, PS వంటి రెట్రో గేమ్ల కోసం అందమైన గేమ్ ఎమ్యులేటర్ ఇంటర్ఫేస్ను అందిస్తుంది.
6. మల్టీప్లేయర్, క్రౌడ్ ప్లే మరియు గేమ్తో బాహ్య లింకింగ్ (డీప్-లింక్) కోసం గదులు
CloudRetro రెట్రో గేమ్ల కోసం CrowdPlay మరియు ఆన్లైన్ మల్టీప్లేయర్ వంటి అనేక కొత్త గేమ్ప్లేలకు మద్దతు ఇస్తుంది. చాలా మంది వినియోగదారులు వేర్వేరు కంప్యూటర్లలో ఒకే డీప్-లింక్ను తెరిస్తే, వారు అదే రన్నింగ్ గేమ్ను చూస్తారు మరియు అందులో చేరగలరు.
అంతేకాకుండా, గేమ్ స్టేట్లు క్లౌడ్ నిల్వలో నిల్వ చేయబడతాయి. ఇది ఏ ఇతర పరికరంలో అయినా ఎప్పుడైనా ప్లే చేయడం కొనసాగించడానికి వినియోగదారులను అనుమతిస్తుంది.
7. క్షితిజసమాంతర స్కేలింగ్
ఈ రోజుల్లో ఏదైనా SAAS లాగా, క్లౌడ్ గేమింగ్ తప్పనిసరిగా క్షితిజ సమాంతరంగా కొలవగలిగేలా రూపొందించబడాలి. కోఆర్డినేటర్-వర్కర్ డిజైన్ మరింత ట్రాఫిక్ను అందించడానికి మరింత మంది కార్మికులను జోడించడానికి మిమ్మల్ని అనుమతిస్తుంది.
8. ఒక క్లౌడ్కు కనెక్షన్ లేదు
CloudRetro యొక్క ఇన్ఫ్రాస్ట్రక్చర్ వివిధ ప్రాంతాల కోసం వివిధ క్లౌడ్ ప్రొవైడర్లలో (డిజిటల్ ఓషన్, అలీబాబా, కస్టమ్ ప్రొవైడర్) హోస్ట్ చేయబడింది. నేను ఇన్ఫ్రాస్ట్రక్చర్ కోసం డాకర్ కంటైనర్లో రన్ చేయడాన్ని ఎనేబుల్ చేస్తాను మరియు ఒకే క్లౌడ్ ప్రొవైడర్లోకి లాక్ చేయబడకుండా ఉండటానికి బాష్ స్క్రిప్ట్ని ఉపయోగించి నెట్వర్క్ సెట్టింగ్లను కాన్ఫిగర్ చేస్తాను. WebRTCలో NAT ట్రావెర్సల్తో దీన్ని కలపడం ద్వారా, మేము CloudRetroని ఏ క్లౌడ్ ప్లాట్ఫారమ్లోనైనా మరియు ఏ వినియోగదారు మెషీన్లలోనైనా అమలు చేసే సౌలభ్యాన్ని కలిగి ఉంటాము.
ఆర్కిటెక్చరల్ డిజైన్
కార్మికుడు: (లేదా పైన పేర్కొన్న స్ట్రీమింగ్ సర్వర్) గేమ్లను గుణిస్తుంది, ఎన్కోడింగ్ పైప్లైన్ను అమలు చేస్తుంది మరియు ఎన్కోడ్ చేసిన మీడియాను వినియోగదారులకు ప్రసారం చేస్తుంది. వర్కర్ ఉదాహరణలు ప్రపంచవ్యాప్తంగా పంపిణీ చేయబడ్డాయి మరియు ప్రతి కార్మికుడు ఏకకాలంలో బహుళ వినియోగదారు సెషన్లను నిర్వహించగలడు.
సమన్వయకర్త: స్ట్రీమింగ్ కోసం అత్యంత అనుకూలమైన వర్కర్తో కొత్త వినియోగదారుని జత చేయడం బాధ్యత. కోఆర్డినేటర్ వెబ్సాకెట్ ద్వారా కార్మికులతో ఇంటరాక్ట్ అవుతారు.
గేమ్ స్టేట్ స్టోరేజ్: అన్ని గేమ్ స్టేట్ల కోసం సెంట్రల్ రిమోట్ స్టోరేజ్. ఈ నిల్వ రిమోట్ సేవ్/లోడ్ వంటి ముఖ్యమైన ఫంక్షన్లను అందిస్తుంది.
CloudRetro యొక్క ఉన్నత-స్థాయి నిర్మాణం
కస్టమ్ స్క్రిప్ట్
దిగువ చిత్రంలో చూపిన 1 మరియు 2 దశల్లో కొత్త వినియోగదారు CloudRetroని తెరిచినప్పుడు, అందుబాటులో ఉన్న కార్మికుల జాబితాతో పాటు సమన్వయకర్త మొదటి పేజీకి అభ్యర్థించబడతారు. దీని తర్వాత, దశ 3లో క్లయింట్ HTTP పింగ్ అభ్యర్థనను ఉపయోగించి అభ్యర్థులందరికీ ఆలస్యాన్ని లెక్కిస్తుంది. ఈ జాప్యాల జాబితా కోఆర్డినేటర్కు తిరిగి పంపబడుతుంది, తద్వారా అతను వినియోగదారుకు సేవ చేయడానికి అత్యంత అనుకూలమైన కార్యకర్తను గుర్తించగలడు. దిగువ 4వ దశ గేమ్ను సృష్టిస్తుంది. వినియోగదారు మరియు కేటాయించిన కార్యకర్త మధ్య WebRTC స్ట్రీమింగ్ కనెక్షన్ ఏర్పాటు చేయబడింది.
యాక్సెస్ పొందిన తర్వాత వినియోగదారు స్క్రిప్ట్
కార్మికుని లోపల ఏముంది
గేమ్ మరియు స్ట్రీమింగ్ పైప్లైన్లు కార్మికుని లోపల ఒంటరిగా నిల్వ చేయబడతాయి మరియు ఇంటర్ఫేస్ ద్వారా సమాచారాన్ని మార్పిడి చేస్తాయి. ప్రస్తుతం, మెమరీలో డేటాను బదిలీ చేయడం ద్వారా ఈ కమ్యూనికేషన్ నిర్వహించబడుతుంది గోలాంగ్ ఛానెల్లు అదే ప్రక్రియలో. తదుపరి లక్ష్యం విభజన, అనగా. మరొక ప్రక్రియలో ఆట యొక్క స్వతంత్ర ప్రారంభం.
కార్మికుల భాగాల పరస్పర చర్య
ప్రధాన భాగాలు:
WebRTC: వినియోగదారు ఇన్పుట్ని అంగీకరించే క్లయింట్ భాగం మరియు సర్వర్ నుండి ఎన్కోడ్ చేసిన మీడియాను అవుట్పుట్ చేస్తుంది.
గేమ్ ఎమ్యులేటర్: ఆట భాగం. Libretro లైబ్రరీకి ధన్యవాదాలు, సిస్టమ్ గేమ్ను అదే ప్రక్రియలో అమలు చేయగలదు మరియు అంతర్గతంగా మీడియా మరియు ఇన్పుట్ స్ట్రీమ్ను అడ్డగించగలదు.
చిత్రం/ఆడియో ఎన్కోడర్: మీడియా ఫ్రేమ్లను తీసుకునే ఎన్కోడింగ్ పైప్లైన్, వాటిని నేపథ్యంలో ఎన్కోడ్ చేస్తుంది మరియు ఎన్కోడ్ చేసిన ఇమేజ్లు/ఆడియోను అవుట్పుట్ చేస్తుంది.
అమలు
CloudRetro దాని వెన్నెముక సాంకేతికతగా WebRTCపై ఆధారపడుతుంది, కాబట్టి గోలాంగ్ అమలుకు సంబంధించిన వివరాలలోకి ప్రవేశించే ముందు, నేను WebRTC గురించి మాట్లాడాలని నిర్ణయించుకున్నాను. ఇది స్ట్రీమింగ్ డేటా కోసం ఉప-సెకండ్ జాప్యాన్ని సాధించడంలో నాకు బాగా సహాయపడిన అద్భుతమైన సాంకేతికత.
WebRTC
సాధారణ APIలను ఉపయోగించి స్థానిక మొబైల్ యాప్లు మరియు బ్రౌజర్లలో అధిక-నాణ్యత పీర్-టు-పీర్ కనెక్షన్లను అందించడానికి WebRTC రూపొందించబడింది.
NAT ట్రావర్సల్
WebRTC దాని NAT ట్రావర్సల్ కార్యాచరణకు ప్రసిద్ధి చెందింది. WebRTC పీర్-టు-పీర్ కమ్యూనికేషన్ కోసం రూపొందించబడింది. అనే ప్రక్రియ ద్వారా పీర్-టు-పీర్ కమ్యూనికేషన్ కోసం NAT గేట్వేలు మరియు ఫైర్వాల్లను తప్పించడం, అత్యంత అనుకూలమైన ప్రత్యక్ష మార్గాన్ని కనుగొనడం దీని లక్ష్యం. ICE. ఈ ప్రక్రియలో భాగంగా, WebRTC APIలు STUN సర్వర్లను ఉపయోగించి మీ పబ్లిక్ IP చిరునామాను కనుగొంటాయి మరియు దానిని రిలే సర్వర్కు ఫార్వార్డ్ చేస్తాయి (టర్న్ చేయండి) ప్రత్యక్ష కనెక్షన్ ఏర్పాటు చేయలేనప్పుడు.
అయితే, CloudRetro ఈ లక్షణాన్ని పూర్తిగా ఉపయోగించుకోలేదు. దీని పీర్-టు-పీర్ కనెక్షన్లు వినియోగదారుల మధ్య ఉండవు, కానీ వినియోగదారులు మరియు క్లౌడ్ సర్వర్ల మధ్య. మోడల్ యొక్క సర్వర్ వైపు సాధారణ వినియోగదారు పరికరం కంటే తక్కువ ప్రత్యక్ష కమ్యూనికేషన్ పరిమితులు ఉన్నాయి. ఇది ఇన్కమింగ్ పోర్ట్లను ముందుగా తెరవడానికి లేదా పబ్లిక్ IP చిరునామాలను నేరుగా ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది, ఎందుకంటే సర్వర్ NAT కంటే వెనుకబడి లేదు.
మునుపు, నేను ప్రాజెక్ట్ను క్లౌడ్ గేమింగ్ కోసం గేమ్ డిస్ట్రిబ్యూషన్ ప్లాట్ఫారమ్గా మార్చాలనుకున్నాను. గేమ్లు మరియు స్ట్రీమింగ్ వనరులను అందించడానికి గేమ్ సృష్టికర్తలను అనుమతించాలనే ఆలోచన ఉంది. మరియు వినియోగదారులు నేరుగా ప్రొవైడర్లతో ఇంటరాక్ట్ అవుతారు. ఈ వికేంద్రీకృత పద్ధతిలో, క్లౌడ్రెట్రో అనేది వినియోగదారులకు మూడవ పక్ష స్ట్రీమింగ్ వనరులను కనెక్ట్ చేయడానికి ఒక ఫ్రేమ్వర్క్ మాత్రమే, ఇది ఇకపై హోస్ట్ చేయబడనప్పుడు మరింత స్కేలబుల్గా చేస్తుంది. థర్డ్-పార్టీ స్ట్రీమింగ్ వనరులపై పీర్-టు-పీర్ కనెక్షన్ ప్రారంభాన్ని సులభతరం చేయడానికి ఇక్కడ WebRTC NAT ట్రావర్సల్ పాత్ర చాలా ముఖ్యమైనది, దీని వలన సృష్టికర్త నెట్వర్క్కి కనెక్ట్ అవ్వడాన్ని సులభతరం చేస్తుంది.
వీడియో కుదింపు
వీడియో కంప్రెషన్ అనేది పైప్లైన్లో ఒక అనివార్యమైన భాగం మరియు మృదువైన ప్రవాహానికి బాగా దోహదపడుతుంది. VP8/H264 వీడియో ఎన్కోడింగ్కు సంబంధించిన ప్రతి వివరాలను తెలుసుకోవడం అవసరం లేనప్పటికీ, కాన్సెప్ట్లను అర్థం చేసుకోవడం వల్ల స్ట్రీమింగ్ వీడియో స్పీడ్ ఆప్షన్లను అర్థం చేసుకోవడం, ఊహించని ప్రవర్తనను డీబగ్ చేయడం మరియు జాప్యాన్ని సర్దుబాటు చేయడం వంటివి చేయవచ్చు.
స్ట్రీమింగ్ సేవ కోసం వీడియోను కుదించడం సవాలుగా ఉంది, ఎందుకంటే అల్గారిథమ్ మొత్తం ఎన్కోడింగ్ సమయం + నెట్వర్క్ ప్రసార సమయం + డీకోడింగ్ సమయం వీలైనంత తక్కువగా ఉండేలా చూసుకోవాలి. అదనంగా, కోడింగ్ ప్రక్రియ స్థిరంగా మరియు నిరంతరంగా ఉండాలి. కొన్ని ఎన్కోడింగ్ ట్రేడ్ఆఫ్లు వర్తించవు-ఉదాహరణకు, మేము చిన్న ఫైల్ పరిమాణాలు మరియు డీకోడింగ్ సమయాల కంటే ఎక్కువ ఎన్కోడింగ్ సమయాలను ఇష్టపడలేము లేదా అస్థిరమైన కుదింపును ఉపయోగించలేము.
వినియోగదారులకు ఆమోదయోగ్యమైన స్థాయి ఖచ్చితత్వాన్ని కొనసాగిస్తూనే అనవసరమైన సమాచారాన్ని తొలగించడం వీడియో కంప్రెషన్ వెనుక ఉన్న ఆలోచన. వ్యక్తిగత స్టాటిక్ ఇమేజ్ ఫ్రేమ్లను ఎన్కోడింగ్ చేయడంతో పాటు, అల్గోరిథం మునుపటి మరియు తదుపరి వాటి నుండి ప్రస్తుత ఫ్రేమ్ను అంచనా వేస్తుంది, కాబట్టి వాటి తేడా మాత్రమే పంపబడుతుంది. ప్యాక్మ్యాన్తో ఉదాహరణ నుండి చూడగలిగినట్లుగా, అవకలన పాయింట్లు మాత్రమే ప్రసారం చేయబడతాయి.
ప్యాక్మ్యాన్ని ఉదాహరణగా ఉపయోగించి వీడియో ఫ్రేమ్ల పోలిక
ఆడియో కంప్రెషన్
అదేవిధంగా, ఆడియో కంప్రెషన్ అల్గోరిథం మానవులు గ్రహించలేని డేటాను విస్మరిస్తుంది. ఓపస్ ప్రస్తుతం అత్యుత్తమ పనితీరు గల ఆడియో కోడెక్. ఇది RTP (రియల్ టైమ్ ట్రాన్స్పోర్ట్ ప్రోటోకాల్) వంటి ఆర్డర్ చేసిన డేటాగ్రామ్ ప్రోటోకాల్పై ఆడియో వేవ్ను ప్రసారం చేయడానికి రూపొందించబడింది. దీని జాప్యం mp3 మరియు aac కంటే తక్కువగా ఉంది మరియు నాణ్యత ఎక్కువగా ఉంటుంది. జాప్యం సాధారణంగా 5~66,5ms ఉంటుంది.
గోలాంగ్లో పియోన్, WebRTC
బంటు WebRTCని గోలాంగ్కు తీసుకువచ్చే ఓపెన్ సోర్స్ ప్రాజెక్ట్. స్థానిక C++ WebRTC లైబ్రరీల యొక్క సాధారణ ర్యాపింగ్కు బదులుగా, Pion అనేది WebRTC ప్రోటోకాల్లపై మెరుగైన పనితీరు, Go ఇంటిగ్రేషన్ మరియు వెర్షన్ నియంత్రణతో WebRTC యొక్క స్థానిక గోలాంగ్ అమలు.
లైబ్రరీ ఉప-సెకండ్ జాప్యంతో చాలా గొప్ప అంతర్నిర్మితాలతో స్ట్రీమింగ్ను కూడా ప్రారంభిస్తుంది. ఇది STUN, DTLS, SCTP మొదలైన వాటి స్వంత అమలును కలిగి ఉంది. మరియు QUIC మరియు WebAssemblyతో కొన్ని ప్రయోగాలు. ఈ ఓపెన్ సోర్స్ లైబ్రరీ అద్భుతమైన డాక్యుమెంటేషన్, నెట్వర్క్ ప్రోటోకాల్ ఇంప్లిమెంటేషన్లు మరియు చక్కని ఉదాహరణలతో నిజంగా మంచి అభ్యాస వనరు.
WebRTC గురించి చాలా నాణ్యమైన చర్చలు జరుగుతున్నందున, చాలా ఉద్వేగభరితమైన సృష్టికర్త నేతృత్వంలోని Pion సంఘం చాలా ఉత్సాహంగా ఉంది. మీకు ఈ సాంకేతికతపై ఆసక్తి ఉంటే, చేరండి http://pion.ly/slack - మీరు చాలా కొత్త విషయాలు నేర్చుకుంటారు.
గోలాంగ్లో క్లౌడ్రెట్రో రాయడం
గోలో ఒక కార్మికుని అమలు
గో ఛానెల్లు యాక్షన్లో ఉన్నాయి
Go యొక్క అందమైన ఛానెల్ డిజైన్కు ధన్యవాదాలు, ఈవెంట్ స్ట్రీమింగ్ మరియు కాన్కరెన్సీ సమస్యలు చాలా సరళీకృతం చేయబడ్డాయి. రేఖాచిత్రంలో వలె, విభిన్న GoRoutineలు సమాంతరంగా నడుస్తున్న బహుళ భాగాలను కలిగి ఉంటాయి. ప్రతి భాగం దాని స్థితిని నిర్వహిస్తుంది మరియు ఛానెల్ల ద్వారా కమ్యూనికేట్ చేస్తుంది. గోలాంగ్ యొక్క సెలెక్టివ్ అసెర్షన్ గేమ్లో ప్రతిసారీ ఒక అటామిక్ ఈవెంట్ను ప్రాసెస్ చేయడానికి బలవంతం చేస్తుంది (గేమ్ టిక్). దీని అర్థం ఈ డిజైన్కు లాకింగ్ అవసరం లేదు. ఉదాహరణకు, వినియోగదారు సేవ్ చేసినప్పుడు, గేమ్ స్థితి యొక్క పూర్తి స్నాప్షాట్ అవసరం. సేవ్ పూర్తయ్యే వరకు లాగిన్ చేస్తూ ఈ స్థితి నిరంతరంగా ఉండాలి. ప్రతి గేమ్ టిక్ సమయంలో, బ్యాకెండ్ సేవ్ లేదా ఇన్పుట్ ఆపరేషన్ను మాత్రమే నిర్వహించగలదు, ప్రక్రియ థ్రెడ్ను సురక్షితంగా చేస్తుంది.
func (e *gameEmulator) gameUpdate() {
for {
select {
case <-e.saveOperation:
e.saveGameState()
case key := <-e.input:
e.updateGameState(key)
case <-e.done:
e.close()
return
}
}
}
ఫ్యాన్-ఇన్/ఫ్యాన్-అవుట్
ఈ గోలాంగ్ టెంప్లేట్ నా క్రౌడ్ప్లే మరియు మల్టిపుల్ ప్లేయర్ యూజ్ కేస్కు సరిగ్గా సరిపోతుంది. ఈ నమూనాను అనుసరించి, ఒకే గదిలోని అన్ని వినియోగదారు ఇన్పుట్లు సెంట్రల్ ఎంట్రన్స్ ఛానెల్లో నిర్మించబడ్డాయి. గేమ్ మీడియా తర్వాత ఒకే గదిలో ఉన్న వినియోగదారులందరికీ అమలు చేయబడుతుంది. ఈ విధంగా, మేము వివిధ వినియోగదారుల యొక్క అనేక గేమ్ సెషన్ల మధ్య గేమ్ స్థితి యొక్క విభజనను సాధిస్తాము.
వివిధ సెషన్ల మధ్య సమకాలీకరణ
గోలాంగ్ యొక్క ప్రతికూలతలు
గోలాంగ్ పరిపూర్ణమైనది కాదు. ఛానెల్ నెమ్మదిగా ఉంది. బ్లాక్ చేయడంతో పోలిస్తే, గో ఛానెల్ అనేది ఉమ్మడి మరియు థ్రెడ్ ఈవెంట్లను నిర్వహించడానికి సులభమైన మార్గం, కానీ ఛానెల్ ఉత్తమ పనితీరును అందించదు. ఛానెల్ కింద సంక్లిష్టమైన బ్లాకింగ్ లాజిక్ ఉంది. కాబట్టి పనితీరును ఆప్టిమైజ్ చేయడానికి ఛానెల్లను భర్తీ చేసేటప్పుడు లాక్లు మరియు పరమాణు విలువలను మళ్లీ అమలు చేయడంలో నేను కొన్ని సర్దుబాట్లు చేసాను.
అదనంగా, గోలాంగ్లోని చెత్త సేకరించే యంత్రం నిర్వహించబడదు, ఇది కొన్నిసార్లు అనుమానాస్పదంగా దీర్ఘ విరామాలకు కారణమవుతుంది. ఇది నిజ-సమయ స్ట్రీమింగ్ అప్లికేషన్తో బాగా జోక్యం చేసుకుంటుంది.
COG
ప్రాజెక్ట్ మీడియా కంప్రెషన్ కోసం ప్రస్తుత ఓపెన్ సోర్స్ గోలాంగ్ VP8/H264 లైబ్రరీని మరియు గేమ్ ఎమ్యులేటర్ల కోసం లిబ్రెట్రోని ఉపయోగిస్తుంది. ఈ లైబ్రరీలన్నీ కేవలం గో ఉపయోగించి C లైబ్రరీ యొక్క రేపర్లు COG. కొన్ని ప్రతికూలతలు జాబితా చేయబడ్డాయి ఈ పోస్ట్ డేవ్ చెనీ. నేను ఎదుర్కొన్న సమస్యలు:
గోలాంగ్ రికవరీక్రాష్తో కూడా CGOలో క్రాష్ను పట్టుకోవడంలో అసమర్థత;
మేము CGOలో వివరణాత్మక సమస్యలను గుర్తించలేనప్పుడు పనితీరు అడ్డంకులను గుర్తించడంలో వైఫల్యం.
తీర్మానం
క్లౌడ్ గేమింగ్ సేవలను అర్థం చేసుకోవడం మరియు నా స్నేహితులతో ఆన్లైన్లో నాస్టాల్జిక్ రెట్రో గేమ్లను ఆడడంలో నాకు సహాయపడే ప్లాట్ఫారమ్ను రూపొందించడం అనే నా లక్ష్యాన్ని నేను సాధించాను. Pion లైబ్రరీ మరియు Pion సంఘం మద్దతు లేకుండా ఈ ప్రాజెక్ట్ సాధ్యం కాదు. దాని ఇంటెన్సివ్ డెవలప్మెంట్ కోసం నేను చాలా కృతజ్ఞుడను. WebRTC మరియు Pion అందించిన సాధారణ APIలు అతుకులు లేని ఏకీకరణను నిర్ధారిస్తాయి. పీర్-టు-పీర్ (P2P) కమ్యూనికేషన్ గురించి నాకు ముందస్తు జ్ఞానం లేనప్పటికీ, భావన యొక్క నా మొదటి రుజువు అదే వారంలో విడుదల చేయబడింది.
ఇంటిగ్రేషన్ సౌలభ్యం ఉన్నప్పటికీ, కంప్యూటర్ సైన్స్లో P2P స్ట్రీమింగ్ నిజానికి చాలా క్లిష్టమైన ప్రాంతం. పీర్-టు-పీర్ సెషన్ను రూపొందించడానికి IP మరియు NAT వంటి దీర్ఘకాలిక నెట్వర్క్ నిర్మాణాల సంక్లిష్టతను ఆమె ఎదుర్కోవలసి ఉంటుంది. ఈ ప్రాజెక్ట్లో పని చేస్తున్నప్పుడు, నేను నెట్వర్కింగ్ మరియు పనితీరు ఆప్టిమైజేషన్ గురించి చాలా విలువైన జ్ఞానాన్ని పొందాను, కాబట్టి WebRTCని ఉపయోగించి P2P ఉత్పత్తులను రూపొందించడానికి ప్రయత్నించమని నేను ప్రతి ఒక్కరినీ ప్రోత్సహిస్తున్నాను.
CloudRetro రెట్రో గేమర్గా నా దృష్టికోణం నుండి నేను ఆశించిన అన్ని వినియోగ సందర్భాలను అందిస్తుంది. అయినప్పటికీ, నెట్వర్క్ను మరింత విశ్వసనీయంగా మరియు పనితీరుగా మార్చడం, అధిక నాణ్యత గల గేమ్ గ్రాఫిక్లను అందించడం లేదా వినియోగదారుల మధ్య గేమ్లను పంచుకునే సామర్థ్యం వంటి అనేక రంగాలు ప్రాజెక్ట్లో ఉన్నాయని నేను భావిస్తున్నాను. నేను దీని కోసం తీవ్రంగా కృషి చేస్తున్నాను. దయచేసి అనుసరించండి ప్రాజెక్ట్ మరియు మీకు నచ్చితే మద్దతు ఇవ్వండి.