Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir

Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
Nermalava wekî karûbar, binesaziya wekî karûbar, platform wekî karûbar, platforma ragihandinê wekî karûbar, konfêransa vîdyoyê wekî karûbar, lîstika ewr wekî karûbar çi ye? Jixwe gelek hewildan hebûn ku lîstika ewr (Cloud Gaming) biafirînin, wek Stadia, ku vê dawiyê ji hêla Google ve hatî destpêkirin. Stadia ji WebRTC re ne nû ye, lê yên din dikarin bi heman rengî WebRTC bikar bînin?

Thanh Nguyen biryar da ku vê derfetê li ser projeya xweya çavkaniya vekirî CloudRetro biceribîne. CloudRetro li ser Pion-ê ye, demane Pirtûkxaneya WebRTC li ser bingeha Go (spas Nîşan dan ji tîmê pêşkeftina Pion ji bo arîkariya wan di amadekirina vê gotarê de). Di vê gotarê de, Thanh nêrînek li ser mîmariya projeya xwe pêşkêşî dike, û di heman demê de li ser tiştên ku ew fêr bûne û çi dijwariyan di dema xebata xwe de pê re rû bi rû mane diaxive.

entry

Sala borî, dema ku Google Stadia ragihand, hişê min hejand. Fikir ew qas bêhempa û nûjen e ku ez bi domdarî meraq dikim ka ev yek bi teknolojiya heyî çawa jî gengaz bû. Daxwaza ku ez vê mijarê baştir fam bikim ji min re hişt ku ez guhertoya xweya lîstikek ewr-çavkaniya vekirî biafirînim. Encam bi tenê fantastîk bû. Li jêr ez dixwazim pêvajoya xebata sala xwe parve bikim rêvename.

TLDR: Guhertoya slide ya kurt a bi ronîkirin

Çima lîstika ewr pêşeroj e

Ez bawer dikim ku Cloud Gaming dê di demek nêzîk de bibe nifşê din ê ne tenê lîstikê, lê her weha warên din ên zanistiya komputerê. Lîstika Cloud lûtkeya modela xerîdar / serverê ye. Ev model bi hostekirina mantiqa lîstikê ya li ser serverek dûr û veguheztina wêneyan / deng ji xerîdar re rêveberiya paşîn herî zêde dike û xebata pêşîn kêm dike. Pêşkêşker pêvajoyek giran dike, ji ber vê yekê xerîdar êdî ne li ber rehmê sînorên hardware ye.

Google Stadia bi bingehîn dihêle hûn bilîzin lîstikên AAA (ango lîstikên blokbusterê yên bilind-end) li ser navgînek mîna YouTube. Heman metodolojî dikare li ser sepanên din ên negirêdayî yên giran ên wekî pergala xebitandinê an sêwirana grafîkî ya 2D / 3D, hwd, were sepandin. da ku em wan bi domdarî li ser cîhazên kêm-spec li seranserê pir platforman bimeşînin.

Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
Pêşeroja vê teknolojiyê: Bifikirin ku Microsoft Windows 10 li ser geroka Chrome-ê dimeşe?

Lîstika Cloud ji hêla teknîkî ve dijwar e

Lîstik yek ji wan deverên kêm e ku bersiva bikarhêner a domdar, bilez hewce ye. Ger carinan em gava ku li ser rûpelek bitikînin bi derengiya 2 çirkeyan re rû bi rû dimînin, ev tê pejirandin. Weşanên vîdyoyê yên zindî çend saniyeyan dereng dimînin, lê dîsa jî karanîna maqûl pêşkêş dikin. Lêbelê, heke lîstik bi gelemperî 500ms paşde bimîne, ew bi hêsanî nayê lîstin. Armanca me ew e ku em derengiya pir kêm bi dest bixin da ku ferqa di navbera têketin û medyayê de bi qasî ku gengaz be piçûk be. Ji ber vê yekê, nêzîkatiya kevneşopî ya weşana vîdyoyê li vir nayê sepandin.

Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
General Cloud Game Şablon

Projeya çavkaniya vekirî CloudRetro

Min biryar da ku nimûneyek ceribandinê ya lîstikek ewr biafirînim da ku bibînim ka ev hemî bi qedexeyên torê yên wusa hişk gengaz e. Min Golang ji bo îspatkirina têgehê hilbijart ji ber ku ew zimanê ku min herî zêde pê nas dikir û ji bo vê pêkanînê ji ber gelek sedemên din re xweş bû, wekî ku min paşê kifş kir. Go hêsan e û pir zû pêş dikeve; Kanalên di Go de ji bo birêvebirina pirzimanî pir girîng in.

Projeyê CloudRetro.io ji bo lîstika retro karûbarek lîstika cloudê ya çavkaniya vekirî ye. Armanca projeyê ew e ku ezmûna lîstika herî rehet bîne lîstikên kevneşopî yên retro û piralîker zêde bike.
Hûn dikarin li vir li ser projeyê bêtir fêr bibin: https://github.com/giongto35/cloud-game.

Fonksiyona CloudRetro

CloudRetro lîstikên retro bikar tîne da ku hêza lîstika ewr nîşan bide. Ya ku dihêle hûn gelek ezmûnên lîstika bêhempa bistînin.

  • Veguheztina lîstikê
    • Lîstika tavilê dema vekirina rûpelê; tu download an sazkirinê pêwîst
    • Di gerokek mobîl de dixebite, ji ber vê yekê ji bo xebitandina wê ne hewce ye

  • Danişînên lîstikê dikarin li ser gelek cîhazan werin parve kirin û ji bo gava din ku hûn têkevinê di ewr de werin hilanîn
  • Lîstik dikare were veguheztin, an jî ew dikare ji hêla çend bikarhêneran ve bi carekê ve were lîstin:
    • Crowdplay mîna TwitchPlayPokemon, tenê pirtir-platform û bêtir rast-dem
    • Offline games liserxetê. Gelek bikarhêner dikarin bêyî sazkirina torê bilîzin. Samurai Shodown naha dikare ji hêla 2 lîstikvanan ve li ser tora CloudRetro were lîstin

    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Guhertoya demo ya lîstika pirzimanî ya serhêl li ser cîhazên cihêreng

    Binesaziya

    Pêdiviyên pêdivî û teknolojiya teknolojî

    Li jêr navnîşek hewcedariyên ku min berî destpêkirina projeyê danîne heye.

    1. Yek lîstikvan
    Dibe ku ev hewcedarî li vir pir girîng an eşkere xuya neke, lê ew yek ji destkeftiyên min ên sereke ye, ew dihêle ku lîstika ewr bi qasî ku gengaz ji karûbarên streaming kevneşopî dûr bimîne. Ger em bala xwe bidin ser lîstikek yek-lîstikvan, em dikarin ji serverek navendî an CDN-ê xilas bibin ji ber ku ne hewce ye ku em ji girseyê re biherikin. Li şûna barkirina çeman li serverek sink an derbaskirina pakêtan ji serverek WebSocket a navendî re, çîmên karûbar rasterast bi riya pêwendiyek WebRTC ya peer-to-peer ji bikarhêner re têne şandin.

    2. Weşana medyayê ya derengiya kêm
    Di xwendina li ser Stadia de, ez pir caran dibînim WebRTC di hin gotaran de tê gotin. Min fêm kir ku WebRTC teknolojiyek berbiçav e û ji bo karanîna di lîstika ewr de bêkêmasî ye. WebRTC projeyek e ku gerokên webê û sepanên mobîl bi navgîniya API-ya sade re pêwendiya rast-dem peyda dike. Ew pêwendiya peer-to-peer peyda dike, ji bo medyayê xweşbîn e, û xwedan kodekên standard ên wekî VP8 û H264 hene.

    Min pêşî lê girt ku ezmûna çêtirîn bikarhêner a gengaz li ser domandina grafikên kalîteya bilind ewle bikim. Hin windahiyên di algorîtmayê de têne qebûl kirin. Google Stadia ji bo kêmkirina mezinahiya wêneyê li ser serverê gavek din heye, û çarçove berî ku ji hevalên xwe re werin veguheztin bi qalîteya bilindtir têne bilind kirin.

    3. Binesaziya belavkirî bi rêvekirina erdnîgarî
    Her çend algorîtmaya berhevkirinê û kodê xweşbîn be jî, tor dîsa jî faktora biryardar e ku herî zêde beşdarî derengbûnê dibe. Pêdivî ye ku mîmarî xwedan mekanîzmayek be ku servera herî nêzê bikarhêner bi hev ve bike da ku dema gera dor (RTT) kêm bike. Pêdivî ye ku mîmarî xwedî 1 koordînator û çend serverên streaming ku li çaraliyê cîhanê têne belav kirin: Dewletên Yekbûyî yên Rojava, Dewletên Yekbûyî yên Rojhilat, Ewropa, Singapore, Chinaîn. Pêdivî ye ku hemî serverên streaming bi tevahî bêne veqetandin. Pergal dikare belavkirina xwe rast bike dema ku serverek tevlê torê bibe an jê derkeve. Bi vî rengî, digel seyrûsefera mezin, lê zêdekirina serverên din rê dide pîvandina horizontal.

    4. Lihevhatina gerokê
    Dema ku ew ji bikarhêneran kêmtirîn hewce dike lîstika Cloud di çêtirîn xwe de ye. Ev tê vê wateyê ku ew gengaz e ku meriv di gerokek de bixebite. Gerok alîkarî dikin ku ezmûna lîstikê ji bo bikarhêneran bi qasî ku pêkan rehet be, wan ji sazkirina nermalava û hardware xilas dike. Gerok di heman demê de di navbera guhertoyên mobîl û sermaseyê de fonksiyonên cross-platform peyda dikin. Xwezî, WebRTC di nav cûrbecûr gerokan de baş tê piştgirî kirin.

    5. Veqetandina zelal a navgîn û karûbarê lîstikê
    Ez karûbarê lîstika ewr wekî platformek dibînim. Divê her kes bikaribe her tiştî bi platformê ve girêbide. Niha min entegre kiriye LibRetro bi karûbarê lîstika ewr re ji ber ku LibRetro ji bo lîstikên retro yên wekî SNES, GBA, PS navgînek emulatora lîstika xweşik pêşkêşî dike.

    6. Odeyên ji bo pirlîstikvan, lîstina girseyê û girêdana derve (girêdana kûr) bi lîstikê re
    CloudRetro ji bo lîstikên retro gelek lîstikên nû yên wekî CrowdPlay û Online MultiPlayer piştgirî dike. Ger çend bikarhêner heman girêdana kûr li ser komputerên cihê vekin, ew ê heman lîstikê bibînin û tewra jî karibin beşdarî wê bibin.

    Wekî din, dewletên lîstikê di hilanîna ewr de têne hilanîn. Ev dihêle bikarhêner di her kêliyê de li ser cîhazek din lîstin bidomînin.

    7. Pîvana Horizontal
    Mîna her SAAS-ê ya îroyîn, lîstoka ewr divê were sêwirandin ku bi rengek horizontî were pîvandin. Sêwirana koordînator-karker dihêle hûn bêtir karkeran zêde bikin da ku bêtir seyrûseferê bikin.

    8. No girêdana bi yek ewr
    Binesaziya CloudRetro ji bo herêmên cûda li ser pêşkêşkerên ewr ên cihêreng (Okyanûsa Dîjîtal, Alibaba, peydakerê xwerû) tê mêvandar kirin. Ez ji bo binesaziyê xebitandina di konteynerek Docker-ê de çalak dikim û mîhengên torê bi karanîna skrîptek bash mîheng dikim da ku nekevin nav pêşkêşkerek ewr a yekane. Bi berhevkirina vê bi NAT Traversal-ê re di WebRTC de, em dikarin xwedan nermbûn bin ku CloudRetro li ser her platformek ewr û tewra li ser makîneyên her bikarhênerek bicîh bikin.

    Sêwirana mîmarî

    Karker: (an jî servera streaming ya ku li jor hatî destnîşan kirin) lîstikan zêde dike, lûleya kodkirinê dimeşîne, û medyaya kodkirî ji bikarhêneran re diherike. Mînakên karker li çaraliyê cîhanê têne belav kirin, û her xebatkar dikare bi hevdemî gelek danişînên bikarhêneran birêve bibe.

    Koordînator: berpirsiyar e ku bikarhênerê nû bi xebatkarê herî guncan re ji bo weşana hevdeng bike. Koordînator bi xebatkaran re bi WebSocket re têkilî dike.

    Depoya dewleta lîstikê: hilanînê dûr navendî ji bo hemû dewletên game. Ev hilanînê fonksiyonên girîng ên wekî hilanînê/barkirina dûr peyda dike.

    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Mîmariya asta jorîn a CloudRetro

    Skrîpta Custom

    Dema ku bikarhênerek nû CloudRetro di gavên 1 û 2 de ku di wêneya jêrîn de têne xuyang kirin vedike, koordînator digel navnîşa xebatkarên berdest ji rûpela yekem re tê xwestin. Piştî vê yekê, di gava 3 de, xerîdar dereng ji bo hemî berendaman bi karanîna daxwazek ping a HTTP-ê dihejmêre. Dûv re ev navnîşa derengan ji koordînatorê re tê şandin da ku ew karkirê herî maqûl destnîşan bike ku ji bikarhêner re xizmet bike. Gav 4 li jêr lîstikê diafirîne. Têkiliyek weşana WebRTC di navbera bikarhêner û xebatkarê destnîşankirî de tê saz kirin.
    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Skrîpta bikarhêner piştî gihîştina gihîştinê

    Di hundurê karker de çi heye

    Lîstik û lûleyên tîrêjê di hundurê xebatkarê de veqetandî têne hilanîn û li wir bi navbeynkarê agahdarî diguhezînin. Heya nuha, ev têkilî bi veguheztina daneya di bîranînê de bi rê ve tête kirin kanalên Golang di heman pêvajoyê de. Armanca paşîn veqetandin e, yanî. destpêkirina serbixwe ya lîstikê di pêvajoyek din de.

    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Têkiliya pêkhateyên karker

    Pêkhateyên sereke:

    • WebRTC: pêkhateyek xerîdar ku têketina bikarhêner qebûl dike û medyaya kodkirî ji serverê derdixe.
    • Emûlatorê lîstikê: pêkhateya lîstikê. Bi saya pirtûkxaneya Libretro, pergal dikare lîstikê di hundurê heman pêvajoyê de bimeşîne û di hundurê medya û têketina têketinê de bigire.
    • Çarçoveyên di lîstikê de têne girtin û ji şîfrekerê re têne şandin.
    • Şîfrekera Wêne / Deng: lûleyek şîfrekirinê ya ku çarçoveyên medyayê digire, wan di paşperdeyê de kod dike, û wêneyên/dûdyoyên kodkirî derdixe.

    Реализация

    CloudRetro xwe dispêre WebRTC wekî teknolojiya xweya piştê, ji ber vê yekê berî ku ez li hûrguliyên pêkanîna Golang bigerim, min biryar da ku ez li ser WebRTC bixwe biaxivim. Ev teknolojiyek ecêb e ku ji min re di bidestxistina derengiya duyemîn-duyemîn de ji bo daneyên weşana pir alîkariya min kiriye.

    WebRTC

    WebRTC ji bo peydakirina girêdanên peer-to-peer-a-kalîteya bilind li ser sepanên mobîl û gerokên xwemalî yên ku bi karanîna API-yên hêsan têne çêkirin hatî çêkirin.

    NAT Traversal

    WebRTC ji bo fonksiyona xwe ya NAT Traversal tê zanîn. WebRTC ji bo pêwendiya peer-to-peer hatiye çêkirin. Armanca wê ew e ku riya rasterê ya herî maqûl bibîne, ji dergehên NAT û dîwarên agir dûr bikeve ji bo pêwendiya peer-to-peer bi pêvajoyek bi navê QEŞA. Wekî beşek ji vê pêvajoyê, API-yên WebRTC navnîşana IP-ya weya giştî bi karanîna pêşkêşkerên STUN-ê dibînin û wê berbi servera relay (ZÎVIR) dema ku têkiliyek rasterast neyê damezrandin.

    Lêbelê, CloudRetro bi tevahî vê taybetmendiyê bikar nayîne. Têkiliyên wê yên peer-to-peer ne di navbera bikarhêneran de, lê di navbera bikarhêner û serverên ewr de hene. Aliyê serverê yê modelê ji amûrek bikarhênerek tîpîk kêmtir astengiyên ragihandinê yên rasterast heye. Ev dihêle hûn portên hatinê pêş-vekin an rasterast navnîşanên IP-ya giştî bikar bînin, ji ber ku server ne li pişt NAT-ê ye.

    Berê, min dixwest ku projeyê ji bo Cloud Gaming veguherînim platformek belavkirina lîstikê. Fikir ev bû ku destûr bide afirînerên lîstikê ku lîstik û çavkaniyên streaming peyda bikin. Û bikarhêner dê rasterast bi pêşkêşvanan re têkilî daynin. Bi vî rengî nemerkezî, CloudRetro tenê çarçoveyek e ji bo girêdana çavkaniyên weşana partiya sêyemîn bi bikarhêneran re, dema ku ew nema mêvandar be wê berbelavtir dike. Rola WebRTC NAT Traversal li vir pir girîng e ji bo hêsankirina destpêkirina pêwendiya peer-to-peer li ser çavkaniyên streaming-partiya sêyemîn, û hêsantir dike ku afirîner bi torê ve were girêdan.

    Compression Video

    Tevlihevkirina vîdyoyê parçeyek domdar a lûleyê ye û di herikîna bêkêmasî de pir beşdar dibe. Digel ku ne hewce ye ku hûn hemî hûrguliyên şîfrekirina vîdyoya VP8/H264 zanibin, têgihîştina têgînan dikare ji we re bibe alîkar ku hûn vebijarkên leza vîdyoyê ya weşana fam bikin, behreya nediyar derbixin, û derengiyê rast bikin.

    Tevlihevkirina vîdyoyê ji bo karûbarek vekêşanê dijwar e ji ber ku algorîtma divê piştrast bike ku tevahiya dema şîfrekirinê + dema veguheztina torê + dema deşîfrekirinê bi qasî ku gengaz kêm e. Wekî din, pêvajoya kodkirinê divê hevgirtî û berdewam be. Hin danûstandinên kodkirinê nayên sepandin - mînakî, em nikanin demên dirêj ên şîfrekirinê li ser mezinahiyên pelan ên piçûktir û demên deşîfrekirinê bipejirînin, an berhevkirina nehevgirtî bikar bînin.

    Fikra li pişt komkirina vîdyoyê ev e ku hûrguliyên agahdariya nepêwist jêbirin dema ku ji bo bikarhêneran astek pejirandî ya rastbûnê diparêze. Ji bilî şîfrekirina çarçeweyên wêneya statîk ên takekesî, algorîtma çarçoweya heyî ji yên berê û yên din derdixe holê, ji ber vê yekê tenê cûdahiya wan tê şandin. Wekî ku ji mînaka Pacman tê dîtin, tenê xalên cihêreng têne şandin.

    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Berawirdkirina çarçoveyên vîdyoyê yên ku Pacman wekî mînak bikar tînin

    Compression Audio

    Di heman demê de, algorîtmaya berhevkirina bihîstwerê daneyên ku ji hêla mirovan ve nayên fêm kirin ji holê radike. Opus niha kodek dengî ya çêtirîn e. Ew ji bo veguheztina pêlek dengî li ser protokolek datagramê fermankirî wekî RTP (Protokola Veguhastina Dem rast) hatî çêkirin. Derengiya wê ji mp3 û aac kêmtir e, û qalîteya wê jî bilindtir e. Dereng bi gelemperî li dora 5 ~ 66,5 ms e.

    Pion, WebRTC li Golang

    Pawn projeyek çavkaniyek vekirî ye ku WebRTC tîne Golang. Li şûna pêçana adetî ya pirtûkxaneyên xwecihî yên C++ WebRTC, Pion pêkanîna Golang a xwecihî ya WebRTC ye bi performansa çêtir, entegrasyona Go, û kontrolkirina guhertoyê li ser protokolên WebRTC.

    Pirtûkxane di heman demê de bi derengiya bine-duyemîn re weşana bi gelek avahîyên mezin re dihêle. Ew pêkanîna xwe ya STUN, DTLS, SCTP, hwd. û hin ceribandinên bi QUIC û WebAssembly. Vê pirtûkxaneya çavkaniya vekirî bixwe çavkaniyek fêrbûnê ya bi rastî baş e bi belgeyên hêja, pêkanînên protokola torê, û mînakên xweş.

    Civaka Pion, ku ji hêla afirînerek pir dilşewat ve tê rêve kirin, pir jîndar e, digel ku gelek nîqaşên kalîteyê di derbarê WebRTC de diqewimin. Heke hûn bi vê teknolojiyê re eleqedar dibin, beşdarî bibin http://pion.ly/slack - hûn ê gelek tiştên nû hîn bibin.

    Nivîsandina CloudRetro li Golang

    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Pêkanîna karkerek li Go

    Biçe Kanalên Di Çalakiyê de

    Bi saya sêwirana kanala xweşik a Go-yê, pirsgirêkên weşana bûyerê û hevdemiyê pir hêsan têne hêsan kirin. Wekî di diagramê de, GoRoutinesên cihêreng xwedan gelek pêkhateyên ku bi hev re dimeşin hene. Her pêkhate rewşa xwe bi rê ve dibe û bi kanalan danûstandinê dike. Daxuyaniya bijartî ya Golang ferz dike ku yek bûyerek atomî her carê di lîstikê de were pêvajo kirin (tîşka lîstikê). Ev tê vê wateyê ku ji bo vê sêwiranê ti kilîtkirin hewce nake. Mînakî, dema ku bikarhênerek tomar dike, wêneyek tevahî ya rewşa lîstikê hewce ye. Pêdivî ye ku ev rewş berdewam bimîne, têkevinê heya ku tomar biqede. Di dema her lîstikek lîstikê de, paşîn tenê dikare operasyonek hilanîn an têketinê bi rê ve bibe, ku pêvajoyek pêvajo ewledar dike.

    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

    Vê şablonê Golang bi tevahî doza karanîna min a CrowdPlay û Multiple Player bi cîh dike. Li dû vê şêwazê, hemî têketinên bikarhêner li yek jûreyê di kanala têketina navendî de têne çêkirin. Dûv re medyaya lîstikê ji hemî bikarhêneran re di heman odeyê de tê şandin. Bi vî rengî, em bigihîjin dabeşkirina rewşa lîstikê di navbera çend danişînên lîstikê yên bikarhênerên cihêreng.

    Lîstika cloudê ya çavkaniya vekirî li ser WebRTC: p2p, piralî, derengiya sifir
    Hevdemkirinê di navbera danişînên cuda de

    Dezawantajên Golang

    Golang ne bêkêmasî ye. Kanal hêdî ye. Li gorî astengkirinê, kanala Go bi hêsanî rêgezek hêsantir e ku meriv bûyerên hevdem û hevdemî bi rê ve bibe, lê kanal performansa çêtirîn peyda nake. Di binê kanalê de mantiqa astengkirina tevlihev heye. Ji ber vê yekê min di pêkanînê de hin sererastkirin çêkir, dema ku kanalan diguhezîne da ku performansê xweştir bike, kilît û nirxên atomî ji nû ve bicîh bikim.

    Wekî din, berhevkarê çopê li Golang bê rêvebirin, ku carinan dibe sedema rawestên dirêj ên bi guman. Ev pir bi sepana weşana rast-demê re tevlihev dike.

    COG

    Proje pirtûkxaneya çavkaniya vekirî ya Golang VP8/H264 ji bo berhevkirina medyayê û Libretro ji bo emulatorên lîstikê bikar tîne. Hemî van pirtûkxane bi tenê pêçanên pirtûkxaneya C ya di Go de têne bikar anîn COG. Hin kêmasiyan di nav de têne navnîş kirin ev post ji hêla Dave Cheney ve. Pirsgirêkên ku min pê re rû bi rû man:

    • nekarîna girtina têkçûnek di CGO de, tewra bi Golang RecoveryCrash re;
    • dema ku em nekarin pirsgirêkên hûrgulî di CGO de tespît bikin, nebûna nasîna astengiyên performansê.

    encamê

    Min gihîşt armanca xwe ya têgihîştina karûbarên lîstika ewr û afirandina platformek ku ji min re dibe alîkar ku ez bi hevalên xwe re bi serhêl re lîstikên retro yên nostaljîk bilîzim. Ev proje bêyî pirtûkxaneya Pion û piştgiriya civaka Pion ne pêkan bû. Ez ji bo pêşkeftina wê ya zexm pir spasdar im. API-yên hêsan ên ku ji hêla WebRTC û Pion ve têne peyda kirin yekbûnek bêkêmasî misoger kirin. Yekem delîla konsepta min di heman heftiyê de hate berdan, her çend min berê agahdariya peer-to-peer (P2P) tunebû.

    Tevî hêsaniya yekbûnê, weşana P2P bi rastî di zanistiya komputerê de deverek pir tevlihev e. Pêdivî ye ku ew bi tevliheviya mîmariya torê ya dirêj-dirêj ên wekî IP û NAT re mijûl bibe da ku danişînek peer-to-peer biafirîne. Dema ku li ser vê projeyê dixebitim, min di derbarê torê û xweşbîniya performansê de gelek zanyariyên hêja bi dest xist, ji ber vê yekê ez her kesî teşwîq dikim ku bi karanîna WebRTC hilberên P2P biceribînin.

    CloudRetro hemî rewşên karanîna ku min ji perspektîfa xwe wekî lîstikvanek retro hêvî dikir, peyda dike. Lêbelê, ez difikirim ku di projeyê de gelek dever hene ku ez dikarim çêtir bikim, wek mînak çêkirina torê pêbawer û performansa, peydakirina grafikên lîstikê yên bi kalîte, an jî şiyana parvekirina lîstikan di navbera bikarhêneran de. Ez li ser vê yekê pir dixebitim. Ji kerema xwe bişopînin rêvename û heke hûn jê hez dikin piştgirî bikin.

Source: www.habr.com

Add a comment