Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency

Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
Software bilang isang Serbisyo, Imprastraktura bilang isang Serbisyo, Platform bilang isang Serbisyo, Platform ng Komunikasyon bilang isang Serbisyo, Video Conferencing bilang isang Serbisyo, at ano ang tungkol sa Cloud Gaming bilang isang Serbisyo? Nagkaroon na ng ilang mga pagtatangka upang lumikha ng cloud gaming (Cloud Gaming), tulad ng Stadia, na inilunsad kamakailan ng Google. Stadia hindi bago sa WebRTC, ngunit maaari bang gamitin ng iba ang WebRTC sa parehong paraan?

Nagpasya si Thanh Nguyen na subukan ang posibilidad na ito sa kanyang open source na proyekto na CloudRetro. Ang CloudRetro ay batay sa Pion, tanyag WebRTC library batay sa Go (salamat Shownu mula sa Pion development team para sa kanilang tulong sa artikulong ito). Sa artikulong ito, nagbibigay si Thanh ng pangkalahatang-ideya ng arkitektura ng kanyang proyekto, at pinag-uusapan din ang tungkol sa kung ano ang natutunan niyang kapaki-pakinabang at kung anong mga hamon ang naranasan niya habang nagtatrabaho.

Pagpasok

Noong nakaraang taon, nang ipahayag ng Google ang Stadia, nabigla ako. Ang ideya ay napaka-kakaiba at makabagong kung kaya't palagi akong nagtataka kung paano ito posible sa umiiral na teknolohiya. Ang pagnanais na mas maunawaan ang paksang ito ay nag-udyok sa akin na lumikha ng sarili kong bersyon ng isang open source na cloud game. Ang resulta ay hindi kapani-paniwala. Sa ibaba ay nais kong ibahagi ang proseso ng pagtatrabaho sa aking taunang proyekto.

TLDR: maikling bersyon ng slide na may mga highlight

Bakit cloud gaming ang hinaharap

Naniniwala ako na ang Cloud Gaming ay malapit nang maging isang bagong henerasyon ng hindi lamang mga laro, kundi pati na rin ang iba pang larangan ng computer science. Ang cloud gaming ay ang pinakatuktok ng modelo ng kliyente/server. Pina-maximize ng modelong ito ang pamamahala sa backend at pinapaliit ang gawain sa frontend sa pamamagitan ng pagho-host ng logic ng laro sa isang malayuang server at pag-stream ng mga larawan/audio sa kliyente. Ginagawa ng server ang mabibigat na pagproseso kaya hindi na napapailalim ang kliyente sa mga limitasyon ng hardware.

Karaniwang hinahayaan ka ng Google Stadia na maglaro Mga larong AAA (ibig sabihin, mga high-end na blockbuster na laro) sa isang interface tulad ng YouTube. Ang parehong pamamaraan ay maaaring ilapat sa iba pang mabibigat na offline na application tulad ng operating system o 2D/3D graphic na disenyo atbp. para mapatakbo namin ang mga ito nang matatag sa mga low-spec na device sa mga platform.

Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
Ang hinaharap ng teknolohiyang ito: isipin kung tumakbo ang Microsoft Windows 10 sa Chrome browser?

Ang cloud gaming ay teknikal na mahirap

Ang paglalaro ay isa sa mga bihirang lugar kung saan kinakailangan ang patuloy na mabilis na reaksyon ng gumagamit. Kung paminsan-minsan ay nakakaranas kami ng pagkaantala ng 2 segundo kapag nagki-click sa isang pahina, ito ay katanggap-tanggap. Ang mga live na video stream ay malamang na nasa likod ng ilang segundo, ngunit nag-aalok pa rin ng isang patas na dami ng kakayahang magamit. Gayunpaman, kung ang laro ay madalas na naantala ng 500ms, hindi ito posible na maglaro. Ang aming layunin ay upang makamit ang napakababang latency upang ang agwat sa pagitan ng input at media ay maliit hangga't maaari. Samakatuwid, ang tradisyonal na diskarte sa streaming video ay hindi naaangkop dito.

Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
Pangkalahatang template ng cloud game

Open source na proyekto CloudRetro

Nagpasya akong lumikha ng isang pagsubok na sample ng isang laro sa ulap upang makita kung posible ang lahat ng ito sa mga matinding paghihigpit sa network. Pinili ko ang Golang para sa patunay ng konsepto dahil ito ang wikang pinakapamilyar sa akin at angkop para sa pagpapatupad na ito para sa maraming iba pang mga kadahilanan, gaya ng nalaman ko sa kalaunan. Ang Go ay simple at mabilis na umuunlad; Ang mga channel sa Go ay mahusay para sa pamamahala ng multithreading.

Proyekto CloudRetro.io ay isang open source cloud gaming service para sa retro gaming. Ang layunin ng proyekto ay dalhin ang pinakakumportableng karanasan sa paglalaro sa mga tradisyonal na retro na laro at magdagdag ng multiplayer.
Maaari mong malaman ang higit pa tungkol sa proyekto dito: https://github.com/giongto35/cloud-game.

Pag-andar ng CloudRetro

Gumagamit ang CloudRetro ng mga retro na laro para ipakita ang kapangyarihan ng cloud gaming. Nagbibigay-daan iyon sa iyo na makakuha ng maraming natatanging karanasan sa paglalaro.

  • Portability ng Laro
    • Instant playback kapag binubuksan ang isang page; walang kinakailangang pag-download at pag-install
    • Gumagana sa isang mobile browser kaya walang software na kailangan upang tumakbo

  • Maaaring ibahagi ang mga session ng laro sa maraming device at maiimbak sa cloud para sa susunod na pag-login
  • Maaaring i-stream ang laro, o maaari mo itong laruin kasama ang ilang user nang sabay-sabay:
    • Crowdplay tulad ng TwitchPlayPokemon, mas maraming cross-platform at mas real-time
    • Mga offline na laro sa online. Maraming user ang maaaring maglaro nang walang network setup. Ang Samurai Shodown ay maaari na ngayong laruin kasama ng 2 manlalaro sa CloudRetro network

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Demo na bersyon ng online multiplayer na laro sa iba't ibang device

    Infrastructure

    Mga kinakailangan at stack ng teknolohiya

    Nasa ibaba ang isang listahan ng mga kinakailangan na itinakda ko bago simulan ang proyekto.

    1. Isang manlalaro
    Ang pangangailangang ito ay maaaring hindi masyadong mahalaga at halata dito, ngunit isa ito sa aking mga pangunahing takeaways, pinapanatili nitong malayo ang cloud gaming sa mga tradisyonal na serbisyo ng streaming hangga't maaari. Kung magfo-focus tayo sa single player game, maaalis natin ang centralized server o CDN dahil hindi na natin kailangang mag-stream sa masa. Sa halip na mag-upload ng mga stream sa isang ingesting server o pagpasa ng mga packet sa isang sentralisadong WebSocket server, ang mga stream ng serbisyo ay direktang ini-stream sa user sa pamamagitan ng isang WebRTC peer connection.

    2. Mababang latency na stream ng media
    Sa pagbabasa tungkol sa Stadia, madalas kong nakikita ang WebRTC na binanggit sa ilang mga artikulo. Napagtanto ko na ang WebRTC ay isang natatanging teknolohiya, at ito ay mahusay para sa paggamit sa cloud gaming. Ang WebRTC ay isang proyekto na nagbibigay sa mga web browser at mobile application ng real-time na komunikasyon sa pamamagitan ng isang simpleng API. Nagbibigay ito ng peer-to-peer na koneksyon, na-optimize para sa media, at may mga built-in na standard codec gaya ng VP8 at H264.

    Inuna ko ang pagbibigay ng pinakamahusay na posibleng karanasan ng gumagamit kaysa sa pagpapanatili ng mataas na kalidad ng mga graphics. Ang ilang mga pagkalugi ay pinapayagan sa algorithm. Ang Google Stadia ay may karagdagang hakbang upang bawasan ang laki ng larawan sa server at ang mga frame ay pinapataas sa mas mataas na kalidad bago ipasa sa mga kapantay.

    3. Ibinahagi na imprastraktura na may geographic na pagruruta
    Hindi alintana kung gaano ka-optimize ang compression algorithm at code, ang network pa rin ang nagpapasya na kadahilanan na may pinakamalaking kontribusyon sa latency. Ang arkitektura ay dapat magkaroon ng mekanismo para sa pagpapares ng server na pinakamalapit sa user para mabawasan ang round-trip time (RTT). Ang arkitektura ay dapat magkaroon ng 1 coordinator at ilang streaming server na ipinamahagi sa buong mundo: US West, US East, Europe, Singapore, China. Ang lahat ng streaming server ay dapat na ganap na nakahiwalay. Maaaring ayusin ng system ang pamamahagi nito kapag sumali o umalis ang server sa network. Kaya, na may mataas na trapiko, ang pagdaragdag ng mga karagdagang server ay nagbibigay-daan sa pahalang na pag-scale.

    4. Pagkatugma sa browser
    Ang cloud gaming ay nasa pinakamainam kapag nangangailangan ito ng pinakamababa mula sa mga user. Nangangahulugan ito na posible na tumakbo sa browser. Tumutulong ang mga browser na gawing komportable ang karanasan sa paglalaro hangga't maaari para sa mga user sa pamamagitan ng pag-save sa kanila mula sa pag-install ng software at hardware. Tumutulong din ang mga browser na magbigay ng cross-platform para sa mga bersyon ng mobile at desktop. Sa kabutihang palad, ang WebRTC ay mahusay na suportado sa iba't ibang mga browser.

    5. Malinaw na paghihiwalay ng interface at serbisyo ng laro
    Tinitingnan ko ang serbisyo ng cloud gaming bilang isang platform. Ang bawat tao'y dapat na maikonekta ang anuman sa platform. Naka-integrate na ako ngayon LibRetro na may serbisyo ng cloud game dahil nag-aalok ang LibRetro ng magandang interface ng emulator ng laro para sa mga retro na laro tulad ng SNES, GBA, PS.

    6. Mga silid para sa multiplayer, crowd play at external linking (deep-link) sa laro
    Sinusuportahan ng CloudRetro ang maraming bagong gameplay gaya ng CrowdPlay at Online MultiPlayer para sa mga retro na laro. Kung maraming user ang magbubukas ng parehong deep-link sa iba't ibang computer, makikita nila ang parehong laro na tumatakbo at makakasali pa sila dito.

    Bukod dito, ang mga estado ng laro ay naka-imbak sa cloud storage. Nagbibigay-daan ito sa mga user na ipagpatuloy ang laro anumang oras sa anumang iba pang device.

    7. Pahalang na pag-scale
    Tulad ng anumang SAAS sa kasalukuyan, ang cloud gaming ay dapat na idinisenyo upang maging pahalang na nasusukat. Ang disenyo ng coordinator-worker ay nagbibigay-daan sa iyo na magdagdag ng higit pang mga manggagawa upang magsilbi ng mas maraming trapiko.

    8. Hindi nakatali sa isang ulap
    Ang imprastraktura ng CloudRetro ay hino-host ng iba't ibang cloud provider (Digital Ocean, Alibaba, custom provider) para sa iba't ibang rehiyon. Pinapagana ko ang pagtakbo sa isang lalagyan ng Docker ng imprastraktura at kino-configure ang mga setting ng network gamit ang isang script ng bash upang maiwasan ang pagiging umasa sa isang provider ng cloud. Sa pagsasama nito sa NAT Traversal sa WebRTC, maaari tayong magkaroon ng flexibility na i-deploy ang CloudRetro sa anumang cloud platform at maging sa anumang makina ng user.

    Disenyo ng arkitektura

    Manggagawa: (o ang streaming server na binanggit sa itaas) ay nagpaparami ng mga laro, nagpapatakbo ng pipeline ng pag-encode, at nag-stream ng naka-encode na media sa mga user. Ang mga instance ng manggagawa ay ipinamamahagi sa buong mundo, at ang bawat manggagawa ay maaaring humawak ng maraming session ng user nang sabay-sabay.

    Coordinator: ay responsable para sa pagpapares ng bagong user sa pinakaangkop na streaming worker. Nakikipag-ugnayan ang coordinator sa mga manggagawa sa pamamagitan ng WebSocket.

    Imbakan ng estado ng laro: gitnang remote na imbakan para sa lahat ng estado ng laro. Nagbibigay ang storage na ito ng mahahalagang feature gaya ng remote save/load.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    CloudRetro top-level na arkitektura

    Custom na Script

    Kapag binuksan ng isang bagong user ang CloudRetro sa mga hakbang 1 at 2 na ipinapakita sa figure sa ibaba, ang coordinator, kasama ang isang listahan ng mga available na manggagawa, ay hinihiling sa unang pahina. Pagkatapos nito, sa hakbang 3, kinakalkula ng kliyente ang mga pagkaantala para sa lahat ng kandidato gamit ang isang kahilingan sa HTTP ping. Ang listahan ng mga pagkaantala na ito ay ibabalik sa coordinator upang matukoy niya ang pinakaangkop na manggagawa na maglingkod sa user. Ang hakbang 4 sa ibaba ay lumilikha ng isang laro. Ang isang koneksyon sa streaming ng WebRTC ay itinatag sa pagitan ng user at ng nakatalagang manggagawa.
    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Custom na script pagkatapos magkaroon ng access

    Ano ang nasa loob ng manggagawa

    Ang mga pipeline ng laro at streaming ay naka-imbak sa loob ng manggagawa nang nakahiwalay at nagpapalitan ng impormasyon doon sa pamamagitan ng interface. Sa kasalukuyan, ang komunikasyong ito ay isinasagawa sa pamamagitan ng paglilipat ng data sa memorya golang channels sa parehong proseso. Ang susunod na layunin ay paghihiwalay, i.e. independiyenteng paglulunsad ng laro sa ibang proseso.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Pakikipag-ugnayan ng mga bahagi ng manggagawa

    Pangunahing bahagi:

    • WebRTC: isang bahagi ng kliyente na tumatanggap ng input ng user at naglalabas ng naka-encode na media mula sa server.
    • Game emulator: bahagi ng laro. Salamat sa Libretro library, nagagawa ng system na patakbuhin ang laro sa loob ng parehong proseso at harangin ang media at input stream sa loob.
    • Kinukuha ang mga in-game na frame at ipinadala sa encoder.
    • Image/audio encoder: isang pipeline ng pag-encode na tumatanggap ng mga media frame, nag-encode sa kanila sa background, at naglalabas ng mga naka-encode na larawan/audio.

    Pagpapatupad

    Umaasa ang CloudRetro sa WebRTC bilang isang backbone na teknolohiya, kaya bago sumisid sa mga detalye ng pagpapatupad ng Golang, nagpasya akong pag-usapan ang tungkol mismo sa WebRTC. Ito ay isang kamangha-manghang piraso ng teknolohiya na nakatulong nang husto sa akin sa pagkamit ng sub-second latency streaming.

    WebRTC

    Ang WebRTC ay idinisenyo upang magbigay ng mataas na kalidad na mga koneksyon ng peer-to-peer sa katutubong mobile app at mga browser gamit ang mga simpleng API.

    NAT Traversal

    Kilala ang WebRTC para sa paggana ng NAT Traversal nito. Ang WebRTC ay dinisenyo para sa peer-to-peer na komunikasyon. Ang layunin nito ay upang mahanap ang pinakaangkop na direktang ruta, pag-iwas sa mga gateway at firewall ng NAT, sa peer-to-peer sa pamamagitan ng isang proseso na tinatawag Yelo. Bilang bahagi ng prosesong ito, hinahanap ng mga WebRTC API ang iyong pampublikong IP address gamit ang mga STUN server at ipapasa ito sa isang relay server (LUMIKO) kapag ang isang direktang koneksyon ay hindi maitatag.

    Gayunpaman, hindi ganap na sinasamantala ng CloudRetro ang kakayahang ito. Ang mga peer-to-peer na koneksyon nito ay hindi umiiral sa pagitan ng mga user, ngunit sa pagitan ng mga user at cloud server. Ang bahagi ng server ng modelo ay may mas kaunting mga paghihigpit sa direktang komunikasyon kaysa sa karaniwang device ng user. Binibigyang-daan ka nitong paunang buksan ang mga papasok na port o direktang gumamit ng mga pampublikong IP address, dahil ang server ay wala sa likod ng NAT.

    Dati, gusto kong gawing platform ng pamamahagi ng laro ang proyekto para sa Cloud Gaming. Ang ideya ay payagan ang mga tagalikha ng laro na magbigay ng mga laro at mapagkukunan ng streaming. At direktang makikipag-ugnayan ang mga user sa mga provider. Sa ganitong desentralisadong paraan, ang CloudRetro ay isang medium lamang para sa pagkonekta ng mga third-party na mapagkukunan ng streaming sa mga user, na ginagawang mas nasusukat kapag ang pagho-host ay hindi na nakabitin dito. Napakahalaga ng papel ng WebRTC NAT Traversal dito upang mapadali ang pagsisimula ng isang peer-to-peer na koneksyon sa mga mapagkukunan ng streaming ng third-party, na ginagawang mas madali para sa lumikha na kumonekta sa network.

    Pag-compress ng video

    Ang video compression ay isang kailangang-kailangan na bahagi ng pipeline at nakakatulong nang malaki sa kinis ng stream. Bagama't hindi kinakailangang malaman ang lahat ng detalye ng VP8/H264 video encoding, ang pag-unawa sa konsepto ay nakakatulong na maunawaan ang mga parameter ng bilis ng streaming ng video, i-debug ang hindi inaasahang gawi, at isaayos ang latency.

    Ang pag-compress ng video para sa isang serbisyo ng streaming ay mahirap dahil dapat tiyakin ng algorithm na ang kabuuang oras ng pag-encode + oras ng paglipat ng network + oras ng pag-decode ay kasing liit hangga't maaari. Bilang karagdagan, ang proseso ng pag-encode ay dapat na pare-pareho at tuluy-tuloy. Ang ilang mga trade-off sa pag-encode ay hindi nalalapat - halimbawa, hindi namin mas gusto ang isang mahabang oras ng pag-encode kaysa sa isang mas maliit na laki ng file at oras ng pag-decode, o gumamit ng hindi pare-parehong compression.

    Ang ideya sa likod ng video compression ay alisin ang mga hindi kinakailangang piraso ng impormasyon habang pinapanatili ang isang katanggap-tanggap na antas ng katapatan para sa mga user. Bilang karagdagan sa pag-encode ng mga indibidwal na static na frame ng larawan, hinuhulaan ng algorithm ang kasalukuyang frame mula sa nakaraan at susunod, kaya ang pagkakaiba lamang ng mga ito ang ipinapadala. Tulad ng makikita mo mula sa halimbawa ng Pacman, ang mga differential point lamang ang ipinadala.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Paghahambing ng mga video frame gamit ang Pacman bilang isang halimbawa

    Audio compression

    Katulad nito, inalis ng audio compression algorithm ang data na hindi nakikita ng mga tao. Ang Opus ay kasalukuyang ang pinakamahusay na gumaganap na audio codec. Ito ay dinisenyo upang magpadala ng isang audio wave sa isang ordered datagram protocol gaya ng RTP (Real Time Transport Protocol). Ang pagkaantala nito ay mas mababa kaysa sa mp3 at aac, at ang kalidad ay mas mataas. Karaniwang nasa 5~66,5ms ang latency.

    Pion, WebRTC sa Golang

    Pawn ay isang open source na proyekto na nagdadala ng WebRTC sa Golang. Sa halip na karaniwang pagbabalot ng mga katutubong C++ WebRTC na library, ang Pion ay isang native na pagpapatupad ng Golang WebRTC na may mas mahusay na pagganap, pagsasama ng Go, at kontrol sa bersyon sa mga protocol ng WebRTC.

    Nagbibigay din ang library ng streaming data na may maraming magagandang built-in na module na may pagkaantala na wala pang isang segundo. Mayroon itong sariling pagpapatupad ng STUN, DTLS, SCTP, atbp. at ilang eksperimento sa QUIC at WebAssembly. Sa sarili nito, ang open source na library na ito ay isang talagang magandang source ng pag-aaral na may mahusay na dokumentasyon, mga pagpapatupad ng network protocol, at mga cool na halimbawa.

    Ang komunidad ng Pion, na pinamumunuan ng isang masigasig na tagalikha, ay medyo masigla at may maraming de-kalidad na talakayan tungkol sa WebRTC. Kung interesado ka sa teknolohiyang ito, sumali http://pion.ly/slack - matututo ka ng maraming bagong bagay.

    Pagsusulat ng CloudRetro sa Golang

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Pagpapatupad ng Manggagawa sa Go

    Pumunta sa mga channel sa aksyon

    Sa magandang disenyo ng mga channel ni Go, ang mga isyu ng event streaming at concurrency ay lubos na pinasimple. Tulad ng sa diagram, mayroong ilang bahagi na tumatakbo nang magkatulad sa iba't ibang GoRoutine. Ang bawat bahagi ay namamahala sa sarili nitong estado at nakikipag-usap sa pamamagitan ng mga channel. Ang napiling paninindigan ni Golang ay nagdudulot ng isang atomic na kaganapan na maproseso sa bawat oras sa laro (game tick). Nangangahulugan ito na walang kinakailangang pagharang para sa disenyong ito. Halimbawa, kapag na-save ang isang user, kinakailangan ang isang buong snapshot ng estado ng laro. Ang estado na ito ay dapat manatiling tuluy-tuloy, nagla-log in hanggang sa makumpleto ang pag-save. Sa bawat pag-tick ng laro, ang backend ay maaari lamang magproseso ng pag-save o pagpasok ng operasyon, na ginagawang ligtas ang proseso sa thread.

    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

    Ang template ng Golang na ito ay mahusay para sa aking CrowdPlay at Multiple Player use case. Kasunod ng pattern na ito, ang lahat ng input ng user sa parehong kwarto ay itinayo sa center input channel. Ang media ng laro ay pagkatapos ay i-deploy sa lahat ng mga gumagamit sa parehong silid. Sa ganitong paraan, nakakamit namin ang paghahati ng estado ng laro sa pagitan ng ilang session ng laro ng iba't ibang user.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Pag-synchronize sa pagitan ng iba't ibang session

    Mga disadvantages ng Golang

    Hindi perpekto si Golang. Mabagal ang channel. Kung ikukumpara sa pag-block, ang isang Go channel ay isang mas madaling paraan upang pangasiwaan ang kasabay at streaming na mga kaganapan, ngunit ang isang channel ay hindi nagbibigay ng pinakamahusay na pagganap. Sa ilalim ng channel mayroong isang kumplikadong lohika sa pagharang. Samakatuwid, gumawa ako ng ilang mga pagsasaayos sa pagpapatupad sa pamamagitan ng muling paglalapat ng mga lock at atomic na halaga kapag pinapalitan ang mga channel upang ma-optimize ang pagganap.

    Bilang karagdagan, ang tagakolekta ng basura ng Golang ay hindi mapangasiwaan, na kung minsan ay nagdudulot ng kahina-hinalang mahabang paghinto. Ito ay lubos na nakakasagabal sa real-time na streaming application.

    COG

    Ginagamit ng proyekto ang kasalukuyang VP8/H264 open source na Golang library para sa media compression at Libretro para sa mga game emulator. Ang lahat ng mga aklatang ito ay pambalot lamang para sa C library sa Go gamit COG. Ang ilan sa mga disadvantages ay nakalista sa ang post na ito Dave Cheney. Mga problemang kinakaharap ko:

    • kawalan ng kakayahang mahuli ang isang pag-crash sa CGO, kahit na may Golang RecoveryCrash;
    • ang kawalan ng kakayahang tumukoy ng bottleneck sa pagganap kapag hindi namin matukoy ang mga butil-butil na isyu sa CGO.

    Konklusyon

    Naabot ko na ang aking layunin na malaman ang mga serbisyo sa cloud gaming at lumikha ng isang platform na tumutulong sa akin na maglaro ng mga nostalgic na retro na laro kasama ang aking mga kaibigan online. Hindi magiging posible ang proyektong ito kung wala ang library ng Pion at ang suporta ng komunidad ng Pion. Lubos akong nagpapasalamat sa kanyang masinsinang pag-unlad. Tiniyak ng mga simpleng API na ibinigay ng WebRTC at Pion ang tuluy-tuloy na pagsasama. Ang aking unang patunay ng konsepto ay inilabas sa parehong linggo, sa kabila ng hindi alam ang tungkol sa mga komunikasyon ng peer-to-peer (P2P).

    Sa kabila ng kadalian ng pagsasama, ang P2P streaming ay talagang isang napakakomplikadong lugar sa computer science. Kailangan nitong harapin ang pagiging kumplikado ng maraming taon na mga arkitektura ng network tulad ng IP at NAT upang lumikha ng isang peer-to-peer session. Habang nagtatrabaho sa proyektong ito, nakaipon ako ng maraming mahalagang kaalaman tungkol sa networking at pag-optimize ng pagganap, kaya inirerekomenda ko na subukan ng lahat na bumuo ng mga produktong P2P gamit ang WebRTC.

    Nagbibigay ang CloudRetro para sa lahat ng mga kaso ng paggamit na inaasahan ko mula sa aking pananaw bilang isang retro gamer. Gayunpaman, sa tingin ko ay maraming bahagi sa proyekto ang maaari kong pagbutihin, tulad ng paggawa ng network na mas maaasahan at gumaganap, pagbibigay ng mas mataas na kalidad ng mga graphics ng laro, o ang kakayahang magbahagi ng mga laro sa pagitan ng mga user. Pinaghirapan ko ito. Mangyaring sundin proyekto at suportahan mo siya kung gusto mo siya.

Pinagmulan: www.habr.com

Magdagdag ng komento