Game cloud open source di WebRTC: p2p, multipemain, tanpa latensi



Perangkat lunak sebagai layanan, infrastruktur sebagai layanan, platform sebagai layanan, platform komunikasi sebagai layanan, konferensi video sebagai layanan, bagaimana dengan cloud gaming sebagai layanan? Sudah ada beberapa upaya untuk membuat cloud gaming (Cloud Gaming), contohnya Stadia yang baru-baru ini diluncurkan oleh Google. Stadia bukanlah orang baru di WebRTC , tetapi dapatkah orang lain menggunakan WebRTC dengan cara yang sama?



Thanh Nguyen memutuskan untuk menguji kemungkinan ini pada proyek open source CloudRetro. CloudRetro didasarkan pada Pion, pustaka WebRTC berbasis Go yang populer (terima kasih kepada Sean dari tim pengembangan Pion untuk membantu artikel ini). Dalam artikel ini, Thanh memberikan gambaran umum tentang arsitektur proyeknya, dan juga menceritakan hal-hal berguna apa yang dia pelajari dan tantangan apa yang dia temui selama bekerja.



pengantar



Tahun lalu ketika Google mengumumkan Stadia, itu mengejutkan saya. Idenya sangat unik dan inovatif sehingga saya terus-menerus bertanya-tanya bagaimana hal ini dapat dilakukan dengan teknologi yang ada. Keinginan untuk lebih memahami topik ini mendorong saya untuk membuat game cloud open source versi saya sendiri. Hasilnya sangat fantastis. Di bawah ini saya ingin membagikan proses pengerjaan proyek satu tahun saya .



TLDR: versi slide pendek dengan sorotan



Mengapa cloud gaming adalah masa depan



Saya yakin Cloud Gaming akan segera menjadi generasi baru tidak hanya game, tetapi juga bidang ilmu komputer lainnya. Cloud gaming adalah puncak dari model klien / server. Model ini memaksimalkan kontrol backend dan meminimalkan pekerjaan frontend dengan menghosting logika game di server jarak jauh dan mengalirkan gambar / audio ke klien. Server melakukan pemrosesan yang berat, sehingga klien tidak lagi mengalami kendala perangkat keras.



Google Stadia pada dasarnya memungkinkan Anda memainkan game AAA(yaitu game blockbuster kelas atas) pada antarmuka seperti YouTube. Metodologi yang sama dapat diterapkan ke aplikasi offline berat lainnya, seperti sistem operasi atau desain grafis 2D / 3D, dll. sehingga kami dapat menjalankannya secara stabil di perangkat dengan spesifikasi rendah di berbagai platform.





Masa depan teknologi ini: dapatkah Anda bayangkan jika Microsoft Windows 10 berjalan di browser Chrome?



Game cloud secara teknis menantang



Bermain game adalah salah satu area langka yang memerlukan respons pengguna yang cepat dan konstan. Jika kami terkadang mengalami penundaan 2 detik saat mengklik halaman, tidak masalah. Streaming video langsung cenderung tertinggal beberapa detik, tetapi masih menawarkan kegunaan yang cukup. Namun, jika gim ini sering tertunda hingga 500 md, hal ini tidak mungkin dimainkan. Tujuan kami adalah mencapai latensi yang sangat rendah sehingga jarak antara input dan media sekecil mungkin. Oleh karena itu, pendekatan tradisional untuk video streaming tidak dapat diterapkan di sini.





Template cloud game umum



Proyek sumber terbuka CloudRetro



Saya memutuskan untuk membuat sampel uji dari game cloud untuk menguji apakah semua ini dimungkinkan di bawah batasan jaringan yang ketat. Saya memilih Golang untuk pembuktian konsep karena ini adalah bahasa saya yang paling akrab dan cocok untuk penerapan ini karena banyak alasan lain, yang ternyata nanti. Go sederhana dan berkembang sangat cepat; pipe di Go sangat bagus untuk mengelola multithreading.



Proyek CloudRetro.io adalah layanan cloud gaming open source untuk game retro. Tujuan dari proyek ini adalah untuk menghadirkan pengalaman bermain game yang paling nyaman ke game retro tradisional dan menambahkan multipemain.

Anda dapat mempelajari lebih lanjut tentang proyek ini di sini: https://github.com/giongto35/cloud-game .



Fungsionalitas CloudRetro



Untuk menampilkan kekuatan penuh dari game cloud, CloudRetro menggunakan game retro. Ini memungkinkan berbagai pengalaman bermain game yang unik.



  • Portabilitas game

    • Pemutaran instan saat membuka halaman; tidak perlu mengunduh dan menginstal
    • Berfungsi di browser seluler sehingga tidak diperlukan perangkat lunak untuk menjalankannya


  • Sesi permainan dapat dibagikan di beberapa perangkat dan disimpan di cloud untuk login berikutnya
  • Gim ini dapat dialirkan, atau Anda dapat memainkannya oleh beberapa pengguna sekaligus:

    • Crowdplay seperti TwitchPlayPokemon, hanya lebih banyak platform lintas dan lebih banyak waktu nyata
    • Game offline online. Banyak pengguna dapat bermain tanpa menyiapkan jaringan. Samurai Shodown sekarang dapat dimainkan oleh 2 pemain di jaringan CloudRetro




    Versi demo dari game multipemain online di berbagai perangkat



    Infrastruktur



    Persyaratan dan tumpukan teknologi



    , .



    1.

    , , . , CDN, . , WebSocket, WebRTC.



    2.

    Stadia, WebRTC. , WebRTC – , . WebRTC – , - API. , , VP8 H264.



    , . . Google Stadia , .



    3.

    , , , . - (RTT). 1 , : , , , , . . , . , , .



    4.

    , . , . , . - . , WebRTC .



    5.

    . . LibRetro , LibRetro -, SNES, GBA, PS.



    6. , crowd play (deep-link)

    CloudRetro , CrowdPlay Online MultiPlayer -. deep-link , .



    , . .



    7.

    SAAS , , . Β«-Β» , .



    8.

    CloudRetro (Digital Ocean, Alibaba, ) . Docker bash-, . NAT Traversal WebRTC, CloudRetro .





    : ( , ) , . , .



    : . WebSocket.



    : . , , , /.





    CloudRetro





    CloudRetro 1 2, , . 3 HTTP ping. , . 4 . WebRTC.









    . Golang . , .. .









    :



    • WebRTC: , .

    • : . Libretro .

    • .

    • / : , , /.





    CloudRetro WebRTC , , Golang, WebRTC. , .



    WebRTC



    WebRTC API.



    NAT Traversal



    WebRTC NAT Traversal. WebRTC . – , NAT- ICE. API WebRTC IP- STUN (TURN), .



    CloudRetro . , . , . IP- , NAT.



    Cloud Gaming. , . . CloudRetro , , . WebRTC NAT Traversal , .





    – , . , VP8/H264, , .



    , , + + , . , . – , , .



    , , . , , . c Pacman’, .





    Pacman





    , , . Opus . , RTP (Real Time Transport Protocol – ). , mp3 aac, . 5~66,5 .



    Pion, WebRTC Golang



    Pion – , WebRTC Golang. C++ WebRTC, Pion Golang- WebRTC , Go, WebRTC.



    . STUN, DTLS, SCTP .. QUIC WebAssembly. , .



    Pion, , , WebRTC. , http://pion.ly/slack – .



    CloudRetro Golang





    Go



    Go



    Go, . , GoRoutines . . Golang (game tick). , . , , . , , . game tick’ , .



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


    Fan-in / Fan-out



    Golang CrowdPlay Multiple Player. , . . , .









    Golang



    Golang . . Go – , . . , .



    , garbage collector Golang , - . .



    CGO



    VP8/H264 Golang Libretro . C Go CGO. Dave Cheney. , :



    • CGO, Golang RecoveryCrash;
    • , CGO.




    – , - . Pion Pion. . API, WebRTC Pion, . , , (P2P).



    , P2P- . , IP NAT . , P2P- WebRTC.



    CloudRetro , , , -. , , , , , , , . . , , .



All Articles