{"id":89303,"date":"2020-07-22T01:42:30","date_gmt":"2020-07-21T23:42:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency"},"modified":"2020-07-22T01:42:30","modified_gmt":"2020-07-21T23:42:30","slug":"oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency","title":{"rendered":"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/Voximplant\/blog\/511626\/\"><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/22dbf7665d7fded15671d98a2afe599b.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nP\u00ebrgjigjja p\u00ebr sh\u00ebrbimin, infrastruktura si sh\u00ebrbim, platforma si sh\u00ebrbim, platforma komunikimi si sh\u00ebrbim, videokonferenca si sh\u00ebrbim, por \u00e7far\u00eb ndodh me loj\u00ebrat n\u00eb re si sh\u00ebrbim? Ka pasur disa p\u00ebrpjekje p\u00ebr t\u00eb krijuar loj\u00ebra n\u00eb re, si\u00e7 \u00ebsht\u00eb Stadia, e lanceruar koh\u00ebt e fundit nga Google. <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/avtlQeaxd_I?t=440\">nuk \u00ebsht\u00eb nj\u00eb e re n\u00eb WebRTC<\/a><\/noindex>, por a mund t'i p\u00ebrdorin t\u00eb tjer\u00ebt WebRTC po ashtu?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Thanh Nguyen vendosi t\u00eb testoj\u00eb k\u00ebt\u00eb mund\u00ebsi n\u00eb projektin e tij open-source CloudRetro. CloudRetro \u00ebsht\u00eb i bazuar n\u00eb Pion, <noindex><a rel=\"nofollow\" href=\"https:\/\/webrtchacks.com\/webrtc-open-source-most-popular\/\">nj\u00eb bibliotek\u00eb<\/a><\/noindex> WebRTC popullore e nd\u00ebrtuar n\u00eb Go (fal\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Sean-Der\">Shonit<\/a><\/noindex> nga ekipi i zhvilluesve t\u00eb Pion p\u00ebr ndihm\u00ebn n\u00eb p\u00ebrgatitjen e k\u00ebtij artikulli). N\u00eb k\u00ebt\u00eb artikull, Thanh jep nj\u00eb pasqyr\u00eb t\u00eb arkitektur\u00ebs s\u00eb projektit t\u00eb tij, si dhe tregon se \u00e7far\u00eb ka m\u00ebsuar dhe me cilat sfida \u00ebsht\u00eb p\u00ebrballur gjat\u00eb pun\u00ebs.<\/p>\n<h2>Hyrje<\/h2>\n<p>\nVitni q\u00eb kaloi, kur Google shpalli Stadia, m\u00eb la pa fjal\u00eb. Ideja \u00ebsht\u00eb aq unike dhe inovative, saq\u00eb vazhdimisht m\u00eb shkonte mendja si \u00ebsht\u00eb e mundur nj\u00eb gj\u00eb e till\u00eb me teknologjit\u00eb ekzistuese. D\u00ebshira p\u00ebr ta kuptuar m\u00eb mir\u00eb k\u00ebt\u00eb tem\u00eb m\u00eb nxiti t\u00eb krijoj versionin tim t\u00eb loj\u00ebs n\u00eb cloud me burim t\u00eb hapur. Rezultati ishte thjesht fantastik. M\u00eb posht\u00eb do t\u00eb doja t\u00eb ndaja procesin e pun\u00ebs mbi projektin tim nj\u00ebvje\u00e7ar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/giongto35\/cloud-game\">projektin<\/a><\/noindex>.<\/p>\n<p><i>TLDR: nj\u00eb version i shkurt\u00ebr me pika kryesore<\/i><\/p>\n<h3>Pse e ardhmja \u00ebsht\u00eb n\u00eb loj\u00ebrat n\u00eb cloud<\/h3>\n<p>\nUn\u00eb besoj se Cloud Gaming shpejt do t\u00eb b\u00ebhet gjenerata e re jo vet\u00ebm e loj\u00ebrave, por edhe e fushave t\u00eb tjera t\u00eb informatik\u00ebs. Loj\u00ebrat n\u00eb cloud jan\u00eb maja e modelit klient\/server. Ky model maksimizon kontrollin mbi backend dhe minimizimin e pun\u00ebs n\u00eb frontend duke vendosur logjik\u00ebn e loj\u00ebs n\u00eb nj\u00eb server t\u00eb larg\u00ebt dhe transmetimin e imazheve\/audios klientit. Serveri kryen p\u00ebrpunimin e r\u00ebnd\u00eb, k\u00ebshtu q\u00eb klienti nuk varet m\u00eb nga kufizimet harduerike.<\/p>\n<p>Google Stadia, n\u00eb thelb, lejon t\u00eb luash <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AAA_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%B8%D0%B3%D1%80%D1%8B)\">loj\u00ebra AAA<\/a><\/noindex> (dmth. loj\u00ebra t\u00eb nivelit t\u00eb lart\u00eb) n\u00eb nj\u00eb nd\u00ebrfaqe si YouTube. E nj\u00ebjta metodologji mund t\u00eb aplikohet p\u00ebr aplikacione t\u00eb tjera t\u00eb r\u00ebnda offline, si sistemi operativ ose dizajni grafik 2D\/3D, etj., q\u00eb t\u00eb mund t\u00eb operojm\u00eb vazhdimisht n\u00eb pajisje me karakteristika t\u00eb ul\u00ebta n\u00eb platforma t\u00eb ndryshme.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/d6ca3e47db5c8e3d9880b304cc3be33b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nE ardhmja e k\u00ebsaj teknologjie: imagjinoni n\u00ebse Microsoft Windows 10 do t\u00eb funksiononte n\u00eb shfletuesin Chrome?<\/p>\n<h3>Loj\u00ebrat n\u00eb re jan\u00eb teknologjikisht t\u00eb nd\u00ebrlikuara<\/h3>\n<p>\nLoj\u00ebrat jan\u00eb nj\u00eb nga ato fusha t\u00eb rralla ku k\u00ebrkohet nj\u00eb reagim i shpejt\u00eb dhe t\u00eb vazhduesh\u00ebm nga p\u00ebrdoruesi. N\u00ebse ndonj\u00ebher\u00eb p\u00ebrballohemi me nj\u00eb vones\u00eb prej 2 sekondash kur klikojm\u00eb n\u00eb nj\u00eb faqe, kjo \u00ebsht\u00eb e pranueshme. Transmetimet video n\u00eb koh\u00eb reale zakonisht kan\u00eb disa sekonda vones\u00eb, por ende ofrojn\u00eb komoditet t\u00eb mjaftuesh\u00ebm p\u00ebr p\u00ebrdorim. Megjithat\u00eb, n\u00ebse nj\u00eb loj\u00eb ka shpesh vonesa prej 500 ms, at\u00ebher\u00eb \u00ebsht\u00eb thjesht e pamundur t\u00eb luash. Q\u00ebllimi yn\u00eb \u00ebsht\u00eb t\u00eb arrijm\u00eb nj\u00eb vones\u00eb jasht\u00ebzakonisht t\u00eb ul\u00ebt, n\u00eb m\u00ebnyr\u00eb q\u00eb distanca midis hyrjes dhe medias t\u00eb jet\u00eb sa m\u00eb e vog\u00ebl. Prandaj, qasja tradicionale ndaj video transmetimit nuk \u00ebsht\u00eb e aplikueshme k\u00ebtu.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/d73765a3c9277c026f407883e1091473.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nShablli i p\u00ebrgjithsh\u00ebm i loj\u00ebs n\u00eb re<\/p>\n<h2>Projekti me burim t\u00eb hapur CloudRetro<\/h2>\n<p>\nVendosa t\u00eb krijoj nj\u00eb most\u00ebr testimi t\u00eb loj\u00ebs n\u00eb re p\u00ebr t\u00eb provuar n\u00ebse gjith\u00e7ka \u00ebsht\u00eb e mundur me kufizimet e rrepta t\u00eb rrjetit. P\u00ebr t\u00eb verifikuar konceptin, zgjodha Golang, pasi kjo \u00ebsht\u00eb gjuha q\u00eb m\u00eb njeh m\u00eb mir\u00eb dhe p\u00ebrshtatet mir\u00eb p\u00ebr k\u00ebt\u00eb implementim p\u00ebr shum\u00eb arsye t\u00eb tjera, si\u00e7 b\u00ebhet e qart\u00eb m\u00eb von\u00eb. Go \u00ebsht\u00eb e thjesht\u00eb dhe evoluon shum\u00eb shpejt; kanalet n\u00eb Go jan\u00eb t\u00eb shk\u00eblqyera p\u00ebr menaxhimin e shum\u00ebprocesor\u00ebsis\u00eb.<\/p>\n<p>Projekt <noindex><a rel=\"nofollow\" href=\"http:\/\/cloudretro.io\/\">CloudRetro.io<\/a><\/noindex> \u2013 sh\u00ebrbim i loj\u00ebrave n\u00eb re me burim t\u00eb hapur p\u00ebr loj\u00ebrat retro. Q\u00ebllimi i projektit \u00ebsht\u00eb t\u00eb sjell\u00eb p\u00ebrvoj\u00ebn m\u00eb t\u00eb rehatshme t\u00eb loj\u00ebs n\u00eb loj\u00ebrat tradicionale retro dhe t\u00eb shtoj\u00eb multiplayer.<br \/>\nMund ta njihni projektin m\u00eb n\u00eb detaje k\u00ebtu: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/giongto35\/cloud-game\">https:\/\/github.com\/giongto35\/cloud-game<\/a><\/noindex>.<\/p>\n<h3>Funksionaliteti i CloudRetro<\/h3>\n<p>\nP\u00ebr t\u00eb demonstruar t\u00eb gjitha fuqit\u00eb e loj\u00ebrave n\u00eb re, n\u00eb CloudRetro p\u00ebrdoren loj\u00ebrat retro. Kjo lejon p\u00ebrvoj\u00eb t\u00eb shumta unike t\u00eb loj\u00ebs.<\/p>\n<ul>\n<li>Portabiliteti i loj\u00ebs\n<ul>\n<li>Luajtje e menj\u00ebhershme kur hapni faqen; ngarkimi dhe instalimi nuk k\u00ebrkohen<\/li>\n<li>Funksionon n\u00eb shfletuesin mobil, k\u00ebshtu q\u00eb nuk \u00ebsht\u00eb e nevojshme asnj\u00eb software p\u00ebr ta nisur<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Sesionet e loj\u00ebrave mund t\u00eb ndahen n\u00eb disa pajisje dhe ruhen n\u00eb re p\u00ebr hyrjen e ardhshme<\/li>\n<li>Loj\u00ebn mund ta transmetoni dhe mund t\u00eb luani menj\u00ebher\u00eb me disa p\u00ebrdorues:\n<ul>\n<li>Crowdplay si TwitchPlayPokemon, por m\u00eb shum\u00eb platform\u00eb dhe m\u00eb real-time<\/li>\n<li>Loj\u00ebrat offline n\u00eb internet. Shum\u00eb p\u00ebrdorues mund t\u00eb luajn\u00eb pa konfigurimin e rrjetit. N\u00eb Samurai Shodown tani mund t\u00eb luajn\u00eb 2 lojtar\u00eb n\u00eb rrjetin CloudRetro<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/bdc715971755d669a026f830ce888520.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVersioni demo i loj\u00ebs shum\u00eb-p\u00ebrdorues n\u00eb pajisje t\u00eb ndryshme<\/p>\n<h2>Infrastruktura<\/h2>\n<p><\/p>\n<h3>K\u00ebrkesat dhe staku i teknologjive<\/h3>\n<p>\nM\u00eb posht\u00eb \u00ebsht\u00eb lista e k\u00ebrkesave q\u00eb kam vendosur para fillimit t\u00eb projektit.<\/p>\n<p><b>1. Nj\u00eb lojtar<\/b><br \/>\nKy k\u00ebrkes\u00eb mund t\u00eb duket jo shum\u00eb e r\u00ebnd\u00ebsishme dhe e evidentuar k\u00ebtu, por \u00ebsht\u00eb nj\u00eb nga p\u00ebrfundimet e mia ky\u00e7e; kjo lejon loj\u00ebrat n\u00eb cloud t\u00eb q\u00ebndrojn\u00eb sa m\u00eb larg sh\u00ebrbimeve tradicionale t\u00eb transmetimit. N\u00ebse p\u00ebrqendrohemi n\u00eb loj\u00ebrat nj\u00ebp\u00ebrdor\u00ebshe, mund t\u00eb shp\u00ebtojm\u00eb nga nj\u00eb server i centralizuar ose CDN, sepse nuk na nevojitet transmetim masiv. N\u00eb vend q\u00eb t\u00eb ngarkojm\u00eb rrjedhat n\u00eb nj\u00eb server p\u00ebr t\u00eb p\u00ebrthithur ose t\u00eb d\u00ebrgojm\u00eb paketa n\u00eb nj\u00eb server t\u00eb centralizuar WebSocket, rrjedhat e sh\u00ebrbimit d\u00ebrgohen drejtp\u00ebrdrejt te p\u00ebrdoruesi p\u00ebrmes nj\u00eb lidhjeje peer-to-peer WebRTC.<\/p>\n<p><b>2. Rrjedha mediale me vones\u00eb t\u00eb ul\u00ebt<\/b><br \/>\nDuke lexuar n\u00eb lidhje me Stadia, shpesh has k\u00ebtu dhe atje p\u00ebrmendjen e WebRTC-s\u00eb n\u00eb disa artikuj. E kuptova se WebRTC \u00ebsht\u00eb nj\u00eb teknologji e shk\u00eblqyer dhe \u00ebsht\u00eb e p\u00ebrshtatshme p\u00ebr p\u00ebrdorim n\u00eb loj\u00ebrat n\u00eb cloud. WebRTC \u00ebsht\u00eb nj\u00eb projekt q\u00eb i ofron shfletuesve dhe aplikacioneve mobile komunikim n\u00eb koh\u00eb reale p\u00ebrmes nj\u00eb API t\u00eb thjesht\u00eb. Ai siguron nj\u00eb lidhje peer-to-peer, t\u00eb optimizuar p\u00ebr media dhe ka kodek\u00ebt standard\u00eb t\u00eb integruar, si VP8 dhe H264.<\/p>\n<p>Kam p\u00ebrpar\u00ebsi siguris\u00eb s\u00eb pun\u00ebs komode t\u00eb p\u00ebrdoruesve, n\u00eb vend t\u00eb ruajtjes s\u00eb cil\u00ebsis\u00eb s\u00eb lart\u00eb grafikore. N\u00eb algorit\u00ebm jan\u00eb t\u00eb lejuara disa humbje. N\u00eb Google Stadia ka nj\u00eb hap shtes\u00eb p\u00ebr t\u00eb ulur madh\u00ebsin\u00eb e imazhit n\u00eb server, dhe kornizat rriten n\u00eb cil\u00ebsi m\u00eb t\u00eb lart\u00eb para se t\u00eb transmetohen n\u00eb nyjat peer-to-peer.<\/p>\n<p><b>3. Infrastruktura e distribuar me rrug\u00ebzim gjeografik<\/b><br \/>\nPavar\u00ebsisht nga sa e optimizuar \u00ebsht\u00eb algoritmi i kompresimit dhe kodi, rrjeti mbetet faktori kryesor q\u00eb kontribuon m\u00eb shum\u00eb n\u00eb vones\u00eb. Arkitektura duhet t\u00eb ket\u00eb nj\u00eb mekaniz\u00ebm p\u00ebr regjistrimin e serverit m\u00eb t\u00eb af\u00ebrt me p\u00ebrdoruesin p\u00ebr t\u00eb reduktuar koh\u00ebn e transmetimit (RTT). Arkitektura duhet t\u00eb ket\u00eb nj\u00eb koordinues dhe disa server\u00eb t\u00eb transmetimit t\u00eb shp\u00ebrndar\u00eb n\u00eb t\u00eb gjith\u00eb bot\u00ebn: Per\u00ebndimi i SHBA, Lindja e SHBA, Evropa, Singapori, Kina. T\u00eb gjith\u00eb server\u00ebt e transmetimit duhet t\u00eb jen\u00eb plot\u00ebsisht t\u00eb izoluar. Sistemi mund t\u00eb rregulloj\u00eb shp\u00ebrndarjen e tij kur nj\u00eb server i bashkohet ose largohet nga rrjeti. K\u00ebshtu, n\u00eb rast t\u00eb trafikut t\u00eb lart\u00eb, shtimin e server\u00ebve shtes\u00eb mund\u00ebson p\u00ebrshkall\u00ebzim horizontal.<\/p>\n<p><b>4. Kompatibiliteti i shfletuesit<\/b><br \/>\nLoja e loj\u00ebrave n\u00eb cloud paraqitet n\u00eb m\u00ebnyr\u00ebn m\u00eb t\u00eb mir\u00eb kur k\u00ebrkon minimumin nga p\u00ebrdoruesit. Kjo do t\u00eb thot\u00eb se \u00ebsht\u00eb e mundur ta nisni n\u00eb shfletues. Shfletuesit ndihmojn\u00eb p\u00ebr ta b\u00ebr\u00eb p\u00ebrvoj\u00ebn e loj\u00ebs sa m\u00eb t\u00eb k\u00ebndshme p\u00ebr p\u00ebrdoruesit, duke i \u00e7liruar ata nga instalimi i softuerit dhe harduerit. Shfletuesit gjithashtu ndihmojn\u00eb p\u00ebr t\u00eb siguruar nd\u00ebrplatformshm\u00ebrin\u00eb p\u00ebr versionet mobile dhe desktop. Fatmir\u00ebsisht, WebRTC \u00ebsht\u00eb shum\u00eb i mb\u00ebshtetur n\u00eb shfletues t\u00eb ndrysh\u00ebm.<\/p>\n<p><b>5. Ndarja e qart\u00eb e nd\u00ebrfaqes s\u00eb loj\u00ebs dhe sh\u00ebrbimit<\/b><br \/>\nUn\u00eb e konsideroj sh\u00ebrbimin e loj\u00ebrave n\u00eb cloud si nj\u00eb platform\u00eb. \u00c7do kush duhet t\u00eb ket\u00eb mund\u00ebsin\u00eb t\u00eb lidh\u00eb \u00e7far\u00ebdo n\u00eb platform\u00eb. Tani kam integruar <noindex><a rel=\"nofollow\" href=\"http:\/\/LibRetro\">LibRetro<\/a><\/noindex> me sh\u00ebrbimin e loj\u00ebrave n\u00eb cloud, sepse LibRetro ofron nj\u00eb nd\u00ebrfaqe t\u00eb k\u00ebndshme p\u00ebr emulators loj\u00ebrash p\u00ebr loj\u00ebrat retro, si SNES, GBA, PS.<\/p>\n<p><b>6. Dhoma p\u00ebr multiplayer, crowd play dhe lidhje t\u00eb thella (deep-link) me loj\u00ebn<\/b><br \/>\nCloudRetro mb\u00ebshtet shum\u00eb loj\u00ebra t\u00eb reja, si CrowdPlay dhe Multiplayer t\u00eb Online p\u00ebr loj\u00ebrat retro. N\u00ebse disa p\u00ebrdorues hapin t\u00eb nj\u00ebjtin deep-link n\u00eb kompjuter\u00eb t\u00eb ndrysh\u00ebm, ata do t\u00eb shohin t\u00eb nj\u00ebjt\u00ebn loj\u00eb t\u00eb nisur dhe madje do t\u00eb ken\u00eb mund\u00ebsin\u00eb t\u00eb bashkohen n\u00eb t\u00eb.<\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, shtetet e loj\u00ebs ruhen n\u00eb ruajtjen n\u00eb re. Kjo u lejon p\u00ebrdoruesve t\u00eb vazhdojn\u00eb loj\u00ebn n\u00eb \u00e7do koh\u00eb n\u00eb \u00e7do pajisje tjet\u00ebr.<\/p>\n<p><b>7. Shkall\u00ebzimi horizontal<\/b><br \/>\nSi \u00e7do SAAS sot, loj\u00ebrat n\u00eb re duhet t\u00eb jen\u00eb t\u00eb projektuar p\u00ebr t'u shkall\u00ebzuar horizontalisht. Konstrukti \"koordinator-pun\u00ebtor\" lejon shtimin e pun\u00ebtor\u00ebve p\u00ebr t\u00eb sh\u00ebrbyer m\u00eb shum\u00eb trafik.<\/p>\n<p><b>8. Nuk ka lidhje me nj\u00eb re t\u00eb vetme<\/b><br \/>\nInfrastruktura e CloudRetro \u00ebsht\u00eb e vendosur n\u00eb ofrues t\u00eb ndrysh\u00ebm t\u00eb reve (Digital Ocean, Alibaba, ofruesi i personalizuar) p\u00ebr rajone t\u00eb ndryshme. Aktivizoj startimin n\u00eb nj\u00eb kontejner Docker p\u00ebr infrastruktur\u00ebn dhe konfigurimin e parametrave t\u00eb rrjetit me nj\u00eb skript bash p\u00ebr t\u00eb shmangur var\u00ebsin\u00eb nga nj\u00eb ofrues i vet\u00ebm. Duke e kombinuar k\u00ebt\u00eb me NAT Traversal n\u00eb WebRTC, ne mund t\u00eb fitojm\u00eb fleksibilitet p\u00ebr t\u00eb vendosur CloudRetro n\u00eb \u00e7do platform\u00eb n\u00eb re dhe madje n\u00eb makinat e \u00e7do p\u00ebrdoruesi.<\/p>\n<h3>Dizajni arkitektonik<\/h3>\n<p>\n<b>Pun\u00ebtori:<\/b> (ose serveri i transmetimi, i p\u00ebrmendur m\u00eb sip\u00ebr) shumon lojrat, ekzekuton nj\u00eb pipeline kodimi dhe transmeton mediat e koduara te p\u00ebrdoruesit. Instancat e punonj\u00ebsve shp\u00ebrndahen n\u00eb t\u00eb gjith\u00eb bot\u00ebn, dhe \u00e7do punonj\u00ebs mund t\u00eb p\u00ebrpunoj\u00eb disa seanca p\u00ebrdoruesish n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb.<\/p>\n<p><b>Koordinator:<\/b> p\u00ebrgjegj\u00ebs p\u00ebr lidhjen e p\u00ebrdoruesit t\u00eb ri me punonj\u00ebsin m\u00eb t\u00eb p\u00ebrshtatsh\u00ebm p\u00ebr transmetim. Koordinator nd\u00ebrvepron me punonj\u00ebsit p\u00ebrmes WebSocket.<\/p>\n<p><b>Depoja e gjendjeve t\u00eb lojrave:<\/b> depo e qendrore e larg\u00ebt p\u00ebr t\u00eb gjitha gjendjet e loj\u00ebs. Kjo depo ofron funksione t\u00eb r\u00ebnd\u00ebsishme si ruajtja\/ngarkimi i larg\u00ebt.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/985447b81350a640b0bd1344b5705113.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nArkitektura e nivelit t\u00eb lart\u00eb t\u00eb CloudRetro<\/p>\n<h3>Skema e p\u00ebrdoruesit<\/h3>\n<p>\nKur nj\u00eb p\u00ebrdorues i ri hap CloudRetro n\u00eb hapat 1 dhe 2, t\u00eb ilustruar m\u00eb posht\u00eb, koordinatori k\u00ebrkon s\u00eb bashku me list\u00ebn e punonj\u00ebsve t\u00eb disponuesh\u00ebm n\u00eb faqen e par\u00eb. Pas k\u00ebsaj, n\u00eb hapin 3, klienti llogarit vonesat p\u00ebr t\u00eb gjith\u00eb kandidat\u00ebt me nj\u00eb k\u00ebrkes\u00eb HTTP ping. Ky list\u00eb vonesash d\u00ebrgohet p\u00ebrs\u00ebri te koordinatori, n\u00eb m\u00ebnyr\u00eb q\u00eb ai t\u00eb mund t\u00eb p\u00ebrcaktoj\u00eb punonj\u00ebsin m\u00eb t\u00eb p\u00ebrshtatsh\u00ebm p\u00ebr t\u00eb sh\u00ebrbyer p\u00ebrdoruesin. N\u00eb hapin 4 m\u00eb posht\u00eb krijohet nj\u00eb loj\u00eb. Nj\u00eb lidhje streaming WebRTC vendoset midis p\u00ebrdoruesit dhe punonj\u00ebsit t\u00eb caktuar.<br \/>\n<img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/00199b5942e3e4314609ec0e70ea7162.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSkema e p\u00ebrdoruesit pas marrjes s\u00eb aksesit<\/p>\n<h3>\u00c7far\u00eb ka brenda punonj\u00ebsit<\/h3>\n<p>\nPipeline-t e loj\u00ebrave dhe streaming ruhen brenda punonj\u00ebsit n\u00eb m\u00ebnyr\u00eb izoluese dhe shk\u00ebmbejn\u00eb informacion aty p\u00ebrmes nj\u00eb interface. Aktualisht, kjo lidhje b\u00ebhet p\u00ebrmes kalimit t\u00eb t\u00eb dh\u00ebnave n\u00eb memorie p\u00ebrmes <noindex><a rel=\"nofollow\" href=\"https:\/\/tour.golang.org\/concurrency\/2\">kanaleve Golang<\/a><\/noindex> n\u00eb t\u00eb nj\u00ebjtin proces. Q\u00ebllimi i ardhsh\u00ebm \u00ebsht\u00eb segregimi, dmth. ekzekutimi i pavarur i loj\u00ebs n\u00eb nj\u00eb proces tjet\u00ebr.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/7a90ec2638344467a34604cd4322165c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nInteraksioni i komponent\u00ebve t\u00eb punonj\u00ebsit<\/p>\n<p>Pjes\u00ebt kryesore:<\/p>\n<ul>\n<li><b>WebRTC:<\/b> komponenti klient, q\u00eb merr hyrjen e p\u00ebrdoruesit dhe del media t\u00eb koduar nga serveri.\n<\/li>\n<li><b>Emulatori i loj\u00ebrave:<\/b> komponenti i loj\u00ebrave. Fal\u00eb bibliotek\u00ebs Libretro, sistemi \u00ebsht\u00eb i aft\u00eb t\u00eb nis\u00eb loj\u00ebn brenda t\u00eb nj\u00ebjtit proces dhe t\u00eb kap\u00eb nd\u00ebrfaqet mediatike dhe rrug\u00ebt e inputit.\n<\/li>\n<li>Kadat brenda loj\u00ebs kapen dhe d\u00ebrgohen n\u00eb kodues.\n<\/li>\n<li><b>Koduese e imazheve\/audio:<\/b> nj\u00eb pipeline kodues q\u00eb merr kadat mediatike, i kodon ato n\u00eb sfond dhe del imazhe\/audio t\u00eb koduara.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Realizimi<\/h2>\n<p>\nCloudRetro mb\u00ebshtetet n\u00eb WebRTC si teknologjin\u00eb kryesore, ndaj para se t\u00eb zhvillohem n\u00eb detajet e implementimit n\u00eb Golang, vendosa t\u00eb flas p\u00ebr vet\u00eb WebRTC-n\u00eb. Kjo \u00ebsht\u00eb nj\u00eb teknologji e mrekullueshme q\u00eb m\u00eb ndihmoi shum\u00eb n\u00eb arritjen e nj\u00eb vonese t\u00eb transmetimit t\u00eb dh\u00ebnash prej vet\u00ebm nj\u00eb pjes\u00eb t\u00eb sekond\u00ebs.<\/p>\n<h3>WebRTC<\/h3>\n<p>\nWebRTC \u00ebsht\u00eb e dizajnuar p\u00ebr t\u00eb siguruar lidhje t\u00eb cil\u00ebsis\u00eb s\u00eb lart\u00eb peer-to-peer n\u00eb aplikacione natyrale mobile dhe n\u00eb shfletues p\u00ebrmes API-ve t\u00eb thjeshta.<\/p>\n<h4>Kalimi NAT <\/h4>\n<p>\nWebRTC \u00ebsht\u00eb i njohur p\u00ebr funksionalitetin e tij NAT Traversal. WebRTC \u00ebsht\u00eb krijuar p\u00ebr komunikim peer-to-peer. Q\u00ebllimi i tij \u00ebsht\u00eb t\u00eb gjej\u00eb rrug\u00ebn m\u00eb t\u00eb p\u00ebrshtatshme direkte, duke evituar NAT-in dhe firewalls p\u00ebr komunikimin peer-to-peer n\u00ebp\u00ebrmjet nj\u00eb procesi t\u00eb quajtur <noindex><a rel=\"nofollow\" href=\"https:\/\/webrtchacks.com\/trickle-ice\/\">ICE<\/a><\/noindex>. N\u00eb kuad\u00ebr t\u00eb k\u00ebtij procesi, API WebRTC gjen adres\u00ebn tuaj publike IP p\u00ebrmes server\u00ebve STUN dhe e redirekton at\u00eb n\u00eb serverin e p\u00ebrcjell\u00ebsit (<noindex><a rel=\"nofollow\" href=\"https:\/\/webrtchacks.com\/?s=turn\">TURN<\/a><\/noindex>), kur nj\u00eb lidhje e drejtp\u00ebrdrejt\u00eb nuk mund t\u00eb krijohet.<\/p>\n<p>Megjithat\u00eb, CloudRetro nuk e p\u00ebrdor plot\u00ebsisht k\u00ebt\u00eb mund\u00ebsi. Lidhjet e tij peer-to-peer ekzistojn\u00eb jo midis p\u00ebrdoruesve, por midis p\u00ebrdoruesve dhe server\u00ebve n\u00eb cloud. Ana server\u00eb e modelit ka m\u00eb pak kufizime p\u00ebr lidhjet e drejtp\u00ebrdrejta sesa nj\u00eb pajisje zakonore p\u00ebrdoruesi. Kjo lejon hapjen e parakohshme t\u00eb porteve hyr\u00ebse ose p\u00ebrdorimin e adresave IP publike direkt, pasi serveri nuk \u00ebsht\u00eb n\u00ebn NAT.<\/p>\n<p>Disa vite m\u00eb par\u00eb, doja ta transformoja projektin n\u00eb nj\u00eb platform\u00eb shp\u00ebrndarjeje loj\u00ebrash p\u00ebr Cloud Gaming. Ideja ishte t\u00eb lejoja krijuesit e loj\u00ebrave t\u00eb ofronin loj\u00ebra dhe burime transmetimi. Nd\u00ebrsa p\u00ebrdoruesit do t\u00eb bashk\u00ebpunonin drejtp\u00ebrdrejt me ofruesit. K\u00ebshtu, n\u00eb nj\u00eb m\u00ebnyr\u00eb t\u00eb decentralizuar, CloudRetro ishte thjesht nj\u00eb mjedis p\u00ebr lidhjen e burimeve t\u00eb transmetimit t\u00eb pal\u00ebve t\u00eb treta me p\u00ebrdoruesit, duke e b\u00ebr\u00eb at\u00eb m\u00eb t\u00eb shkall\u00ebzuesh\u00ebm, kur nuk kishte m\u00eb nj\u00eb host n\u00eb t\u00eb. Roli i WebRTC NAT Traversal \u00ebsht\u00eb shum\u00eb i r\u00ebnd\u00ebsish\u00ebm p\u00ebr leht\u00ebsimin e inicializimit t\u00eb nj\u00eb lidhjeje peer-to-peer me burimet e transmetimit t\u00eb pal\u00ebve t\u00eb treta, duke e b\u00ebr\u00eb m\u00eb t\u00eb leht\u00eb lidhjen e krijuesit me rrjetin.<\/p>\n<h4>Ngjeshja e videos<\/h4>\n<p>\nNgjeshja e videos \u00ebsht\u00eb nj\u00eb pjes\u00eb thelb\u00ebsore e pipeline-it q\u00eb kontribuon shum\u00eb n\u00eb qet\u00ebsin\u00eb e transmetimit. Megjith\u00ebse nuk \u00ebsht\u00eb e nevojshme t\u00eb keni njohuri mbi t\u00eb gjitha detajet e kodimit t\u00eb videos n\u00eb VP8\/H264, kuptimi i konceptit ndihmon n\u00eb menaxhimin e parametrave t\u00eb shpejt\u00ebsis\u00eb s\u00eb videos n\u00eb transmetim, zgjidhjen e sjelljeve t\u00eb papritura dhe rregullimin e vonesave.<\/p>\n<p>Kompresimi i videove p\u00ebr sh\u00ebrbime streaming \u00ebsht\u00eb nj\u00eb detyr\u00eb e komplikuar, sepse algoritmi duhet t\u00eb garantoj\u00eb q\u00eb koha totale e kodimit + koha e transmetimit n\u00eb rrjet + koha e dekodimit \u00ebsht\u00eb sa m\u00eb e vog\u00ebl t\u00eb jet\u00eb e mundur. P\u00ebrve\u00e7 k\u00ebsaj, procesi i kodimit duhet t\u00eb jet\u00eb i vazhduesh\u00ebm dhe i pand\u00ebrprer\u00eb. Disa prap\u00ebva\u00e7\u00ebsi gjat\u00eb kodimit nuk jan\u00eb t\u00eb aplikueshme \u2013 p\u00ebr shembull, nuk mund t\u00eb preferojm\u00eb nj\u00eb koh\u00eb t\u00eb gjat\u00eb kodimi p\u00ebr nj\u00eb madh\u00ebsi m\u00eb t\u00eb vog\u00ebl skedari dhe koh\u00eb dekodimi, ose t\u00eb p\u00ebrdorim kompresim t\u00eb paq\u00ebndruesh\u00ebm.<\/p>\n<p>Ideja e kompresimit t\u00eb videove \u00ebsht\u00eb q\u00eb t\u00eb eliminohen bitet e panevojshme t\u00eb informacionit, duke ruajtur nj\u00eb nivel t\u00eb pranuesh\u00ebm sakt\u00ebsie p\u00ebr p\u00ebrdoruesit. P\u00ebrve\u00e7 kodimit t\u00eb kadrove statike individuale t\u00eb imazhit, algoritmi b\u00ebn q\u00ebndrimin p\u00ebr kadron aktuale nga e kaluara dhe e ardhmja, k\u00ebshtu q\u00eb d\u00ebrgohet vet\u00ebm dallimi i tyre. Si\u00e7 shihet n\u00eb shembullin me Pacman, vet\u00ebm piketat diferenciale d\u00ebrgohen.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/e452c54c53ab7797b610620aefbba8d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKrahasimi i videokadrove n\u00eb shembullin e Pacman<\/p>\n<h4>Kompresimi i audios<\/h4>\n<p>\nN\u00eb t\u00eb nj\u00ebjt\u00ebn m\u00ebnyr\u00eb, algoritmi i kompresimit t\u00eb z\u00ebrit heq t\u00eb dh\u00ebnat q\u00eb nuk mund t\u00eb perceptohen nga njeriu. Opus aktualisht \u00ebsht\u00eb kodeku audio me performanc\u00ebn m\u00eb t\u00eb mir\u00eb. Ai \u00ebsht\u00eb zhvilluar p\u00ebr t\u00eb transmetuar val\u00ebt e audios p\u00ebrmes nj\u00eb protokolli t\u00eb datagram\u00ebs s\u00eb renditur, si\u00e7 \u00ebsht\u00eb RTP (Protokolli i Transportit n\u00eb Koh\u00eb reale). Vonesa e tij \u00ebsht\u00eb m\u00eb e ul\u00ebt se ajo e mp3 dhe aac, dhe cil\u00ebsia \u00ebsht\u00eb m\u00eb e lart\u00eb. Vonesa zakonisht \u00ebsht\u00eb rreth 5~66.5 ms.<\/p>\n<h4>Pion, WebRTC n\u00eb Golang<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pion\/webrtc\">Pion<\/a><\/noindex> \u00ebsht\u00eb nj\u00eb projekt me kod t\u00eb hapur q\u00eb sjell WebRTC n\u00eb Golang. N\u00eb vend t\u00eb p\u00ebrgjith\u00ebsimit t\u00eb librarive native C++ t\u00eb WebRTC, Pion \u00ebsht\u00eb nj\u00eb implementim native Golang i WebRTC me performanc\u00eb m\u00eb t\u00eb mir\u00eb, integrim me Go, si dhe menaxhim versioni p\u00ebr protokollet WebRTC.<\/p>\n<p>Biblioteka gjithashtu ofron transmetim me shum\u00eb module t\u00eb shk\u00eblqyera t\u00eb integruara me vones\u00eb m\u00eb pak se nj\u00eb sekond\u00eb. Ajo ka implementimin e saj t\u00eb STUN, DTLS, SCTP, etj., si dhe disa eksperimente me QUIC dhe WebAssembly. Vet\u00eb kjo bibliotek\u00eb open-source \u00ebsht\u00eb nj\u00eb burim v\u00ebrtet i shk\u00eblqyer p\u00ebr m\u00ebsim me dokumentacion t\u00eb shk\u00eblqyer, implementim t\u00eb protokollit rrjet dhe shembuj t\u00eb shk\u00eblqyer.<\/p>\n<p>Komuniteti Pion, drejtuar nga nj\u00eb krijues shum\u00eb i pasionuar, \u00ebsht\u00eb mjaft aktiv, ka shum\u00eb diskutime cil\u00ebsore mbi WebRTC. N\u00ebse jeni t\u00eb interesuar p\u00ebr k\u00ebt\u00eb teknologji, bashkohuni me <noindex><a rel=\"nofollow\" href=\"http:\/\/pion.ly\/slack\">http:\/\/pion.ly\/slack<\/a><\/noindex> \u2013 do t\u00eb m\u00ebsoni shum\u00eb gj\u00ebra t\u00eb reja.<\/p>\n<h3>Shkrimi i CloudRetro n\u00eb Golang<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/f85f7b8ea579fab964d870aad698c7e7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nImplementimi i nj\u00eb pun\u00ebtori n\u00eb Go<\/p>\n<h4>Kanalet Go n\u00eb veprim<\/h4>\n<p>\nD grazie dizajnit t\u00eb bukur t\u00eb kanaleve Go, problemet e transmetimit t\u00eb ngjarjeve dhe paralelizmit b\u00ebhen shum\u00eb m\u00eb t\u00eb lehta. Si\u00e7 tregohet n\u00eb diagram, disa komponent\u00eb punojn\u00eb paralelisht n\u00eb GoRoutines t\u00eb ndryshme. \u00c7do komponent menaxhon gjendjen e tij dhe komunikon p\u00ebrmes kanaleve. Aft\u00ebsia selektive e Golang b\u00ebn q\u00eb t\u00eb p\u00ebrpunohet nj\u00eb ngjarje atomike n\u00eb \u00e7do moment t\u00eb loj\u00ebs (game tick). Kjo do t\u00eb thot\u00eb se p\u00ebr nj\u00eb dizajn t\u00eb till\u00eb nuk nevojitet bllokim. P\u00ebr shembull, kur nj\u00eb p\u00ebrdorues ruan, k\u00ebrkohet nj\u00eb snapshot i plot\u00eb i gjendjes s\u00eb loj\u00ebs. Kjo gjendje duhet t\u00eb mbetet e vazhdueshme, duke ekzekutuar input deri sa ruajtja t\u00eb p\u00ebrfundoj\u00eb. Gjat\u00eb \u00e7do game tick\u2019i, backend mund t\u00eb p\u00ebrpunoj\u00eb vet\u00ebm nj\u00eb operacion ruajtjeje ose inputi, duke e b\u00ebr\u00eb procesin t\u00eb sigurt p\u00ebr shum\u00ebllojshm\u00ebri.<\/p>\n<pre><code class=\"go\">func (e *gameEmulator) gameUpdate() {\nfor {\n\tselect {\n\t\tcase &lt;-e.saveOperation:\n\t\t\te.saveGameState()\n\t\tcase key := &lt;-e.input:\n\t\t\te.updateGameState(key)\n\t\tcase &lt;-e.done:\n\t\t\te.close()\n\t\t\treturn\n\t}\n    }\n}<\/code><\/pre>\n<p><\/p>\n<h4>Fan-in \/ Fan-out<\/h4>\n<p>\nKy\u00e7i Golang \u00ebsht\u00eb shum\u00eb i p\u00ebrshtatsh\u00ebm p\u00ebr skenarin tim t\u00eb p\u00ebrdorimit me CrowdPlay dhe Multiple Player. Duke ndjekur k\u00ebt\u00eb model, t\u00eb gjitha hyrjet e p\u00ebrdoruesve n\u00eb nj\u00eb dhom\u00eb integrohen n\u00eb kanalin kryesor t\u00eb hyrjes. Mediat e loj\u00ebs m\u00eb pas shp\u00ebrndahen n\u00eb t\u00eb gjith\u00eb p\u00ebrdoruesit n\u00eb nj\u00eb dhom\u00eb. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, ne arrijm\u00eb ndarjen e gjendjes s\u00eb loj\u00ebs midis disa seancave t\u00eb loj\u00ebs t\u00eb p\u00ebrdoruesve t\u00eb ndrysh\u00ebm.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero vones\u00eb\" src=\"\/wp-content\/uploads\/2020\/07\/000a495d7f214246a8a396aab11a3ac5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSinkronizimi midis seancave t\u00eb ndryshme<\/p>\n<h4>Disavantazhet e Golang<\/h4>\n<p>\nGolang nuk \u00ebsht\u00eb i p\u00ebrsosur. Kanali \u00ebsht\u00eb i ngadalsh\u00ebm. N\u00eb krahasim me bllokimin, kanali Go \u00ebsht\u00eb thjesht nj\u00eb m\u00ebnyr\u00eb m\u00eb e leht\u00eb p\u00ebr t\u00eb trajtuar ngjarjet paralele dhe p\u00ebrfluktuese, por kanali nuk ofron performanc\u00ebn m\u00eb t\u00eb mir\u00eb. N\u00ebn kanal ka nj\u00eb logjik\u00eb t\u00eb komplikuar bllokimi. Prandaj, kam b\u00ebr\u00eb disa korrigjime n\u00eb zbatimin, duke rishtuar bllokimet dhe vlerat atomike kur z\u00ebvend\u00ebsoj kanal\u00ebt p\u00ebr optimizimin e performanc\u00ebs.<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, mbledh\u00ebsi i mbetjeve n\u00eb Golang \u00ebsht\u00eb i paq\u00ebndruesh\u00ebm, duke shkaktuar ndonj\u00ebher\u00eb shp\u00ebrthime t\u00eb dyshimta t\u00eb gjata. Kjo e pengon ndjesh\u00ebm funksionimin e aplikacionit n\u00eb koh\u00eb reale.<\/p>\n<h4>CGO<\/h4>\n<p>\nP\u00ebr projektin p\u00ebrdoret nj\u00eb bibliotek\u00eb ekzistuese VP8\/H264 Golang me burim t\u00eb hapur p\u00ebr kompresimin e medias dhe Libretro p\u00ebr emuluesit e loj\u00ebrave. T\u00eb gjitha k\u00ebto biblioteka jan\u00eb thjesht mb\u00ebshtjell\u00ebs t\u00eb bibliotek\u00ebs C n\u00eb Go duke p\u00ebrdorur <noindex><a rel=\"nofollow\" href=\"https:\/\/golang.org\/cmd\/cgo\/\">CGO<\/a><\/noindex>. Disa nga disavantazhet e tyre jan\u00eb p\u00ebrmendur n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/dave.cheney.net\/2019\/10\/06\/use-internal-packages-to-reduce-your-public-api-surface\">k\u00ebt\u00eb postim t\u00eb Dave Cheney<\/a><\/noindex>. Problemet me t\u00eb cilat k\u00ebrkova:<\/p>\n<ul>\n<li>pamund\u00ebsia p\u00ebr t\u00eb kapur crash-in n\u00eb CGO, madje edhe me ndihm\u00ebn e Golang RecoveryCrash;<\/li>\n<li>pamund\u00ebsia p\u00ebr t\u00eb identifikuar ngushticat n\u00eb performanc\u00eb kur nuk mund t\u00eb zbulojm\u00eb detajet n\u00eb CGO.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P\u00ebrfundimi<\/h2>\n<p>\nArrita q\u00ebllimin tim - kuptova sh\u00ebrbimet e lojrave cloud dhe krijova nj\u00eb platform\u00eb q\u00eb ndihmon p\u00ebr t\u00eb luajtur loj\u00ebrat retro nostalgjike me miqt\u00eb e mi online. Krijimi i k\u00ebtij projekti do t\u00eb kishte qen\u00eb i pamundur pa bibliotek\u00ebn Pion dhe mb\u00ebshtetje nga komuniteti Pion. Jam jasht\u00ebzakonisht mir\u00ebnjoh\u00ebs p\u00ebr zhvillimin e tij t\u00eb intensifikuar. API-t\u00eb e thjeshta t\u00eb ofruara nga WebRTC dhe Pion ofruan integrim t\u00eb qet\u00eb. D\u00ebshmia ime e par\u00eb e konceptit u l\u00ebshua n\u00eb t\u00eb nj\u00ebjt\u00ebn jav\u00eb, megjith\u00ebse nuk dija paraprakisht p\u00ebr lidhjen nj\u00eb-n\u00eb-nj\u00eb (P2P).<\/p>\n<p>Megjith\u00ebse integrimi \u00ebsht\u00eb i thjesht\u00eb, transmetimi P2P \u00ebsht\u00eb nj\u00eb fush\u00eb shum\u00eb e nd\u00ebrlikuar n\u00eb shkenc\u00ebn kompjuterike. Ai p\u00ebrballet me kompleksitetin e arkitekturave shum\u00ebvje\u00e7are t\u00eb rrjetit, si IP dhe NAT, p\u00ebr t\u00eb krijuar nj\u00eb seanc\u00eb peer-to-peer. Gjat\u00eb pun\u00ebs n\u00eb k\u00ebt\u00eb projekt kam mbledhur njohuri t\u00eb \u00e7muara p\u00ebr rrjetin dhe optimizimin e performanc\u00ebs, prandaj rekomandoj t\u00eb gjith\u00ebve q\u00eb ta provoni t\u00eb nd\u00ebrtoni produkte P2P me WebRTC.<\/p>\n<p>CloudRetro mbulon t\u00eb gjitha skenar\u00ebt e p\u00ebrdorimit q\u00eb prisja, nga k\u00ebndv\u00ebshtrimi im si retro-gamer. Sidoqoft\u00eb, mendoj se ka shum\u00eb fusha n\u00eb projekt q\u00eb mund t'i p\u00ebrmir\u00ebsoj, si ta b\u00ebj rrjetin m\u00eb t\u00eb besuesh\u00ebm dhe m\u00eb eficient, t\u00eb siguroj cil\u00ebsi m\u00eb t\u00eb lart\u00eb grafike p\u00ebr loj\u00ebrat, ose mund\u00ebsin\u00eb p\u00ebr t\u00eb ndar\u00eb loj\u00ebrat mes p\u00ebrdoruesve. Po punoj shum\u00eb n\u00eb k\u00ebt\u00eb drejtim. Ju lutem, ndihmoni <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/giongto35\/cloud-game\">projektin<\/a><\/noindex> dhe mb\u00ebshteteni n\u00ebse ju p\u00eblqen.<\/li>\n<\/ul>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/Voximplant\/blog\/511626\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u041e \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0430 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0438? \u0423\u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 (Cloud Gaming), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Stadia, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google. Stadia \u043d\u0435 \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 WebRTC, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebRTC \u0442\u0430\u043a \u0436\u0435? \u0422\u0445\u0430\u043d\u044c \u041d\u0433\u0443\u0435\u043d (Thanh [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89304,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89303","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u041e \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0430 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0438? \u0423\u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 (Cloud Gaming), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Stadia, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google. Stadia \u043d\u0435 \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 WebRTC, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebRTC \u0442\u0430\u043a \u0436\u0435? \u0422\u0445\u0430\u043d\u044c \u041d\u0433\u0443\u0435\u043d (Thanh\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u0438\u043d\u0433 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 WebRTC: p2p, \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440, zero latency | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u041e \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0430 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0438? \u0423\u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 (Cloud Gaming), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Stadia, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google. Stadia \u043d\u0435 \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 WebRTC, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebRTC \u0442\u0430\u043a \u0436\u0435? \u0422\u0445\u0430\u043d\u044c \u041d\u0433\u0443\u0435\u043d (Thanh\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-21T23:42:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-21T23:42:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Loj\u00ebrat n\u00eb re me burim t\u00eb hapur n\u00eb WebRTC: p2p, shum\u00ebloj\u00ebshe, zero latency | ProHoster","description":"P\u00ebrmbushja si sh\u00ebrbim, infrastruktura si sh\u00ebrbim, platforma si sh\u00ebrbim, platforma e komunikimit si sh\u00ebrbim, videokonferenca si sh\u00ebrbim, por si \u00ebsht\u00eb me loj\u00ebrat n\u00eb re si sh\u00ebrbim? Ka pasur disa p\u00ebrpjekje p\u00ebr t\u00eb krijuar loj\u00ebra n\u00eb re (Cloud Gaming), si\u00e7 \u00ebsht\u00eb Stadia, e lan\u00e7uar s\u00eb fundmi nga Google. Stadia nuk \u00ebsht\u00eb nj\u00eb newcomer n\u00eb WebRTC, por a mundet q\u00eb t\u00eb tjer\u00ebt t\u00eb p\u00ebrdorin WebRTC po aq mir\u00eb? Thanh Nguyen (Thanh","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u0438\u043d\u0433 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 WebRTC: p2p, \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440, zero latency | ProHoster","og:description":"\u041f\u041e \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430, \u0430 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0438? \u0423\u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 (Cloud Gaming), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Stadia, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google. Stadia \u043d\u0435 \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 WebRTC, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebRTC \u0442\u0430\u043a \u0436\u0435? \u0422\u0445\u0430\u043d\u044c \u041d\u0433\u0443\u0435\u043d (Thanh","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/oblachnyj-gejming-s-otkrytym-ishodnym-kodom-na-webrtc-p2p-multipleer-zero-latency","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-21T23:42:30+00:00","article:modified_time":"2020-07-21T23:42:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89303","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:12:27","updated":"2022-09-29 13:03:06"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/89303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=89303"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/89303\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/89304"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=89303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=89303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=89303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}