áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡áá±ááŒáá·áº áá±á¬á·ááºáá²á áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡áá±ááŒáá·áº á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡ááŒá
Ạááááºáá±á¬ááºážá áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡áá±ááŒáá·áº áááºááœááºáá±ážááááºáá±á¬ááºážá áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡áá±ááŒáá·áº áá®áá®ááá¯ááœááºáááá·áºá áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡áá±ááŒáá·áº cloud ááááºážáá
á¬ážááŒááºážááŸáá·áºáááºáááºá á¡áááºáááºážá áááŒá¬áá±ážáá®á Google ááŸá
áááºáá¯ááºáá¯ááºáá²á·áá±á¬ Stadia áá²á·ááá¯á·áá±á¬ Cloud Gaming (Cloud Gaming) ááᯠáááºáá®ážááẠááŒáá¯ážáááºážááŸá¯áá»á¬ážá
áœá¬ ááŒá¯áá¯ááºáá¬ážááŒá®ážááŒá
áºáááºá Stadia
Thanh Nguyen ááẠáááºážá open source ááá±á¬áá»áẠCloudRetro ááœáẠá€á¡ááœáá·áºá¡áá±ážááᯠá
ááºážáááºááẠáá¯á¶ážááŒááºáá²á·áááºá CloudRetro ááẠPion ááá¯á¡ááŒá±áá¶ááŒá®ážá
entry ááá¯
áááŸá
áºáá¯ááºážá Google á Stadia ááᯠááŒá±áá¬áá¯ááºážá á
áááºáá²ááŸá¬ á
áœá²ááœá¬ážáááºá á¡áá¯ááºáá®áá¬ááẠá¡ááœááºáá°ážááŒá¬ážáááºážáá
áºáá±á¬ááŒá±á¬áá·áº áááºááŸááááºážááá¬ááŸáá·áº áááºááá¯á·ááŒá
áºááá¯ááºáááºááᯠáá»áœááºá¯ááºá¡ááŒá²áááºážááœá±ážáá±á¬áá±áá«áááºá á€á¡ááŒá±á¬ááºážá¡áá¬ááᯠááá¯ááá¯áá±á¬ááºážááœááºá
áœá¬áá¬ážáááºááá¯áá±á¬ááá¹áá áá»áœááºá¯ááºá¡á¬áž open-source cloud ááááºážá ááá¯ááºááá¯ááºáá¬ážááŸááºážááᯠáááºáá®ážááẠááŸá¯á¶á·áá±á¬áºáá±ážáá²á·áááºá ááááºá ááá¯ážááá¯ážááŸááºážááŸááºážáá² áá±á¬ááºážáá«áááºá á¡á±á¬ááºááŸá¬ áá»áœááºáá±á¬á·áºáá²á· áá
áºááŸá
áºáᬠáá¯ááºáááºážá
ááºááœá±ááᯠáá»áŸáá±áá±ážáá»ááºáá«áááºá
TLDR- áá±á«áºááœááºáá»ááºáá»á¬ážááŸáá·áºá¡áá° ááá¯áá±á¬ááºážáá±á¬ áááá¯ááºáá¬ážááŸááºáž
Cloud ááááºážááẠá¡áááºááŒá±á¬áá·áº á¡áá¬áááºááŒá áºááááºážá
Cloud Gaming ááẠáááŒá¬áá® ááááºážáá á¬ážáá¯á¶áá¬áá á¡ááŒá¬ážáá±á¬ ááœááºáá»á°áá¬áááá¹áá¶áááºáááºáá»á¬ážá áá±á¬ááºáá»áá¯ážáááºááŒá áºáá¬áááºáᯠáá»áœááºáá±á¬áºáá¯á¶ááŒááºáá«áááºá Cloud ááááºážááẠáááá¯ááºážááá·áº/áá¬áá¬áá±á¬áºáááºá á¡ááœááºá¡ááááºááŒá áºáááºá á€áá±á¬áºáááºááẠáá±á¬ááºáá¶á á®áá¶ááá·áºááœá²ááŸá¯ááᯠáá»á²á·ááœááºáᬠá¡áá±ážááááºážáá¬áá¬ááœáẠááááºážáá¯áá¹ááááᯠáááºáá¶áá±á¬ááºááœááºáá±ážááŒá®áž áááá¯ááºážááá·áºáá¶ááá¯á· áá¯á¶áá»á¬áž/á¡áá¶ááœáŸáá·áºááŒááºážááŒáá·áº ááŸá±á·áááºážá¡áá¯ááºáá»á¬ážááᯠáá»áŸá±á¬á·áá»áá±ážáááºá áá¬áá¬ááẠáá±ážáá¶áá±á¬áá¯ááºáá±á¬ááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáá±á¬ááŒá±á¬áá·áº client ááẠáá¬á·ááºáá²ááá·áºáááºáá»ááºáá»á¬ážááᯠááá¯áá¬áááºááŸá¯áááŸááá±á¬á·áá«á
Google Stadia ááẠá¡áááá¡á¬ážááŒáá·áº ááá·áºá¡á¬áž áá
á¬ážááœáá·áºáá±ážáááºá
á€áááºážááá¬áá¡áá¬áááº- Microsoft Windows 10 ááẠChrome ááá±á¬ááºáá¬áá±á«áºááœáẠá¡áá¯ááºáá¯ááºáááºááᯠá
áááºáá°ážááŒáá·áºáá«á
Cloud ááááºážááẠáááºážááá¬á¡á á áááºáá±á«áºááŸá¯ááŒá áºáááºá
ááááºážáá±á¬á·ááŒááºážááẠá¡ááŒá²áááŒááºá ááŒááºáááºáá±á¬ áá¯á¶ážá áœá²áá°áá¯á¶á·ááŒááºááŸá¯ ááá¯á¡ááºááá·áº ááŸá¬ážáá«ážáá±á¬ áááºáááºáá»á¬ážáá²á០áá áºáá¯ááŒá áºáááºá á á¬áá»ááºááŸá¬áá áºáá¯ááᯠááŸáááºááá·áºá¡áá« áá¶áááºáá¶áá« áá»áœááºá¯ááºááá¯á·ááẠ2 á áá¹ááá·áºááŸá±á¬áá·áºááŸá±ážááŸá¯ááᯠááŒá¯á¶ááœá±á·ááá«áá áááºážááᯠáááºáá¶ááá¯ááºáááºá ááá¯ááºááá¯ááºáá®áá®ááá¯á á®ážááŒá±á¬ááºážáá»á¬ážááẠá áá¹ááá·áºá¡áááºážááẠáá±á¬ááºáá»áá±á·ááŸááá±á¬áºáááºáž áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºá áœá¬ á¡áá¯á¶ážááŒá¯ááá¯ááºá áœááºážááᯠáá±ážá áœááºážáá±áá²ááŒá áºáááºá ááá¯á·áá±á¬áºáááºáž ááááºážááẠ500ms ááŒáá·áº áááŒá¬áá áá±á¬ááºáá»áá±áá«áá áááºážááẠááá¯ážááá¯ážááŸááºážááŸááºáž áá á¬ážááááá«á áá»áœááºá¯ááºááá¯á·á áááºááŸááºážáá»ááºááŸá¬ ááá·áºááœááºážááŸá¯ááŸáá·áº áá®áá®áá¬á¡ááŒá¬áž ááœá¬ááá»áẠáááºážáá«ážááá¯ááºááá»áŸ áááºážáá«ážá á±áááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·á áááºááŸááºážáá»ááºááŸá¬ á¡ááœááºáááºážáá±á¬ latency áááŸááááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá®áá®ááá¯ááŒáá·áºááŸá¯ááŒááºážá¡ááœáẠááá¯ážáá¬áááºážáááºážááᯠá€áá±áá¬ááœáẠá¡áá¯á¶ážáá»ááááá«á
General Cloud Game Template
á¡áááºážá¡ááŒá áºááá±á¬áá»áẠCloudRetro
á€áá²á·ááá¯á· áááºážáá»ááºáá±á¬ ááœááºáááºááá·áºáááºáá»ááºáá»á¬ážááŒá±á¬áá·áº áááºážá¡á¬ážáá¯á¶áž ááŒá áºááá¯ááºáá»á±ááŸááááŸá ááŒáá·áºááẠcloud ááááºážá á ááºážáááºááá°áá¬áá áºáá¯ááᯠáááºáá®ážááẠáá¯á¶ážááŒááºáá²á·áááºá áá« Golang ááᯠá¡áá°á¡áá¡áá±á¬ááºá¡áá¬ážá¡ááœáẠáá«á¡áá»áœááºážááááºáá¯á¶ážáá¬áá¬á áá¬ážááŒá áºááŒá®ážá áá±á¬ááºááá¯ááºážááœáẠááŸá¬ááœá±ááœá±á·ááŸááá²á·ááá·áºá¡ááá¯ááºáž á€á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡ááœáẠáá±á¬ááºážá áœá¬ááá·áºáá»á±á¬áºáá±á¬ááŒá±á¬áá·áº áááºážááᯠGolang ááᯠááœá±ážáá»ááºáá²á·áááºá Go ááẠááá¯ážááŸááºážááŒá®áž á¡ááœááºáá»ááºááŒááºá áœá¬ ááá¯ážáááºáááºá Go ááŸá áá»ááºáááºáá»á¬ážááẠmultithreading ááᯠá á®áá¶ááá·áºááœá²áááºá¡ááœáẠáá±á¬ááºážááœááºáá«áááºá
á
á®áá¶ááááºážá
á€áá±áá¬ááœáẠááá±á¬áá»ááºá¡ááŒá±á¬ááºáž ááá¯ááá¯áá±á·áá¬ááá¯ááºáá«áááºá
CloudRetro áá¯ááºáá±á¬ááºááá¯ááºá áœááºáž
CloudRetro ááẠcloud ááááºážáá á¬ážááŒááºážá á áœááºážá¡á¬ážááᯠááá¯ááºááŒááẠáá±ááºáá±á¬ááºážááááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá áá°ážááŒá¬ážáá±á¬ááááºážáá á¬ážááŒááºážá¡ááœá±á·á¡ááŒá¯á¶áá»á¬ážá áœá¬ááᯠáááºáááŸáá á±ááá·áºá¡áá¬á
- ááááºážááááºáá±á¬ááºáááœááºáá°ááŒááºážá
- á á¬áá»ááºááŸá¬ááá¯ááœáá·áºááá·áºá¡áá« áá»ááºááŒááºážááŒááºááœáá·áºáá«á áá±á«ááºážáá¯áẠááá¯á·ááá¯áẠáááºáááºáááºáááá¯á¡ááºáá«á
- ááá¯ááá¯ááºážááá±á¬ááºáá¬ááœáẠá¡áá¯ááºáá¯ááºáá±á¬ááŒá±á¬áá·áº áááºážááá¯áááºáááºááẠáá±á¬á·ááºáá²ááºáááá¯á¡ááºáá«á
- ááááºážá ááºááŸááºáá»á¬ážááᯠá ááºá¡áá»á¬ážá¡ááŒá¬ážááœáẠáá»áŸáá±ááá¯ááºááŒá®áž áá±á¬ááºáá áºááŒááẠáááºáááºáá±á¬ááºááá·áºá¡áá»áááºá¡ááœáẠcloud ááœáẠááááºážáááºážááá¯ááºáá«áááºá
- ááááºážááᯠááá¯ááºááá¯ááºááŒáá·áºááŸá¯ááá¯ááºááẠááá¯á·ááá¯áẠá¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážá áá
áºááŒáá¯ááºááẠáá
á¬ážááá¯ááºáááº-
- TwitchPlayPokemon áá²á·ááá¯á· Crowdplayá ááá¯áá¬ááœááºáá±á¬ ááááºáá±á¬ááºážááŸáá·áº á¡áá»áááºááŸáá·áºáááŒá±ážáá® ááá¯ááá¯áá«áááºáá«áááºá
- á¡á±á¬á·ááºááá¯ááºážááááºážáá»á¬áž á¡áœááºááá¯ááºážá á¡áá¯á¶ážááŒá¯áá° á¡áá»á¬ážá¡ááŒá¬ážááẠááœááºáááºááᯠááááºáááºáá² áá á¬ážááá¯ááºáááºá ááᯠSamurai Shodown ááᯠCloudRetro ááœááºáááºá០áá á¬ážááá¬áž 2 áŠážááŒáá·áº áá á¬ážááá¯ááºáá«ááŒá®á
ááá°áá®áá±á¬á ááºáá á¹á ááºážáá»á¬ážááœáẠá¡áœááºááá¯ááºážá¡áá»á¬ážá¡ááŒá¬ážáá á¬ážáá°ááááºážáááá¯ááºááŒáá¬ážááŸááºážá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¥á®áá»á¬áž
ááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áº áááºážááá¬á¡á á¯á¡áá±áž
á¡á±á¬ááºááœáẠááá±á¬áá»ááºáá áááºáá® áá»áœááºá¯ááºáááºááŸááºáá¬ážáá±á¬ ááá¯á¡ááºáá»ááºáá»á¬ážá á¬áááºážááŒá áºáá«áááºá
1. áá á¬ážááá¬ážáá áºáŠáž
á€ááá¯á¡ááºáá»ááºááẠá€áá±áá¬ááœáẠá¡ááœááºá¡áá±ážáá«áá¯á¶ ááá¯á·ááá¯áẠáááá¬áááºááŸá¬ážáááºááá¯ááºáá«á ááá¯á·áá±á¬áº áááºážááẠáá»áœááºá¯ááºáá¡ááááá±á¬á·áá»ááºáá áºáá¯ááŒá áºáááºá áááºážááẠcloud ááááºážáá±á¬á·ááŒááºážááᯠááá¬ážááá¯ážáá»ááŒáá·áºááŸá¯ááŒááºážáááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºááá¯ááºááá»áŸáá±ážáá±ážáá±ááá¯ááºá á±áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá á¬ážááá¬ážáá áºáŠážáááºážááááºážááá¯á¡á¬áá¯á¶á áá¯ááºáá«áá áá»áœááºá¯ááºááá¯á·ááẠáá°á¡áá»á¬ážáᶠááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºáááºáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáááá¯áá»á¯ááºááá¯ááºáá¬ážáá±á¬áá¬áᬠááá¯á·ááá¯áẠCDN ááᯠáááºááŸá¬ážááá¯ááºáááºá sink server ááá¯á· stream áá»á¬áž á¡ááºáá¯ááºáááºááŒááºáž ááá¯á·ááá¯áẠpackets áá»á¬ážááᯠáááá¯áá»á¯ááºááá¯ááºáá¬ážáá±á¬ WebSocket áá¬áá¬ááá¯á· ááŒááºáááºážááá·áºá¡á á¬ážá áááºáá±á¬ááºááŸá¯á á®ážááŒá±á¬ááºážáá»á¬ážááᯠpeer-to-peer WebRTC áá»áááºáááºááŸá¯ááŸáá áºááá·áº áá¯á¶ážá áœá²áá°áᶠááá¯ááºááá¯ááºáá±ážááá¯á·áá«áááºá2. latency áááºážáá±á¬ áá®áá®áá¬á á®ážááŒá±á¬ááºáž
Stadia á¡ááŒá±á¬ááºážáááºáááºážá áá±á¬ááºážáá«ážá¡áá»áá¯á·ááœáẠáá±á¬áºááŒáá¬ážáá±á¬ WebRTC ááᯠáááŒá¬áá ááœá±á·áá°ážáááºá WebRTC ááẠáá°ážáá°ážááŒá¬ážááŒá¬áž áááºážááá¬áá áºáá¯ááŒá áºááŒá®áž cloud ááááºážáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááẠááŒá®ážááŒáá·áºá á¯á¶ááŒá±á¬ááºáž áá»áœááºá¯ááºááá±á¬áá±á«ááºáá«áááºá WebRTC ááẠááá¯ážááŸááºážáá±á¬ API ááŸáááá·áº áááºááá±á¬ááºáá¬áá»á¬ážááŸáá·áº ááá¯ááá¯ááºážá¡ááºááá®áá±ážááŸááºážáá»á¬ážááᯠá¡áá»áááºááŸáá·áºáá áºááŒá±ážáá® áááºááœááºáá±ážááá·áº ááá±á¬áá»ááºáá áºáá¯ááŒá áºáááºá áááºážááẠpeer-to-peer áá»áááºáááºááŸá¯ááᯠáá¶á·ááá¯ážáá±ážáááºá áá®áá®áá¬á¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºáá¬ážááŒá®áž VP8 ááŸáá·áº H264 áá²á·ááá¯á·áá±á¬ á á¶áá¯ááºáá áºáá»á¬ážáá«ááŸááááºáá¡áááºá¡ááœá±ážááŒáá·áº ááááºáá áºáá»á¬ážááᯠááááºážááááºážááŒááºážááẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºááá¯ááºáá±á¬ á¡áá¯á¶ážááŒá¯áá°á¡ááœá±á·á¡ááŒá¯á¶ááᯠáá±áá»á¬á á±ááẠáŠážá á¬ážáá±ážáá¯ááºáá±á¬ááºáá²á·áá«áááºá á¡áá»áá¯á·áá±á¬áá¯á¶ážááŸá¯á¶ážááŸá¯áá»á¬ážááᯠalgorithm ááœááºáááºáá¶ááá¯ááºáááºá Google Stadia ááœáẠáá¬áá¬áá±á«áºááœáẠáá¯á¶á¡ááœááºá¡á á¬ážááᯠáá»áŸá±á¬á·áá»ááẠáá±á¬ááºáááºá¡ááá·áºáá áºáᯠááŸáááŒá®áž áá±ážáá±á¬ááºáá»á¬ážááᯠááœááºáá°áá»á¬ážáᶠáááá¯á·áá® á¡áááºá¡ááœá±ážááŒáá·áºáá±á¬ áááááºáá»á¬ážááᯠá¡ááá·áºááŒáŸáá·áºáááºáá¬ážáááºá
áá áááá®áááºáááºážááŒá±á¬ááºážááŒáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶
compression algorithm ááŸáá·áº code áá»á¬ážááᯠáááºáá»áŸ optimized áá¯ááºáá¬ážáá«á á±á network ááẠlatency ááᯠá¡áá»á¬ážáá¯á¶áž á¡áá±á¬ááºá¡áá°ááŒá áºá á±áá±á¬ á¡áá¯á¶ážá¡ááŒááºáá±ážááá·áºá¡áá»ááºááŒá áºáá±áá²ááŒá áºáááºá á¡ááœá¬ážá¡ááŒááºá¡áá»ááẠ(RTT) áá»áŸá±á¬á·áá»áááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá°ááŸáá·áº á¡áá®ážá ááºáá¯á¶áž áá¬áá¬ááᯠááœá²áá»áááºááẠáááºáá±á¬ááºáá¯á¶ááœáẠááá¹ááá¬ážáá áºáᯠááŸáááá«áááºá áááá¯áá¬áááºáá¬ááœáẠááŸáááŸáá¯ááºážáá±ážááŸá°áž 1 áŠážááŸáá·áº ááá¹áá¬áá áºááŸááºážááŸá áá¯ááºááœáŸáá·áºáá±áá±á¬ ááá¯ááºááá¯ááºáá¬áá¬áá»á¬ážá áœá¬ ááŸáááááº- US á¡áá±á¬ááºá US á¡ááŸá±á·á á¥áá±á¬áá á ááºáá¬áá°á ááá¯ááºá ááá¯ááºááá¯ááºááœáŸáá·áºáá¬áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá¯á¶ážá áá®ážááŒá¬ážááœá²áá¬ážááá«áááºá áá¬áá¬ááẠááœááºáááºáá»áááºáááºááŸá¯ ááá¯á·ááá¯áẠááœááºáááºááŸááœááºááœá¬ááá·áºá¡áá« á áá áºááẠáááºážáááŒáá·áºááŒá°ážááŸá¯ááᯠáá»áááºááŸáááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áºá ááŒá®ážáá¬ážáá±á¬á¡ááœá¬ážá¡áá¬ááŸáá·áºá¡áá°á áá±á¬ááºáááºáá¬áá¬áá»á¬ážááá·áºááŒááºážááẠá¡áá»á¬ážááá¯ááºá¡ááá¯ááºážá¡áá¬ááᯠááœáá·áºááŒá¯áááºá4. ááá±á¬ááºáᬠááá¯ááºáááºááŸá¯
á¡áá¯á¶ážááŒá¯áá°áá»á¬ážáá¶á០á¡áááºážáá¯á¶ážááá¯á¡ááºáá±á¬á¡áá«ááœáẠCloud ááááºážááẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºáááºá ááá¯ááá¯áááºááŸá¬ browser áá áºáá¯ááœáẠrun ááá¯ááºáááºá ááá±á¬ááºáá¬áá»á¬ážááẠáá¯á¶ážá áœá²áá°áá»á¬ážá¡ááœáẠáá±á¬á·ááºáá²ááºááŸáá·áº áá¬á·ááºáá²áá»á¬ážááᯠááá·áºááœááºážááŒááºážá០áááºáá¬á á±ááŒá®áž ááááºážáá á¬ážááŒááºážá¡ááœá±á·á¡ááŒá¯á¶ááᯠáááºááá¯ááºááá»áŸ áááºáá±á¬áá·áºáááºáá¬ááŒá áºá á±áááºá ááá±á¬ááºáá¬áá»á¬ážááẠááá¯ááá¯ááºážááŸáá·áº áááºá áá±á¬á·áá¬ážááŸááºážáá»á¬ážááŒá¬ážááœáẠá¡ááŒááºá¡ááŸááºáá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá áá¶áá±á¬ááºážá áœá¬ááŒáá·áºá WebRTC ááẠááá±á¬ááºáá¬á¡áá»áá¯ážáá»áá¯ážááœáẠáá±á¬ááºážááœááºá áœá¬áá¶á·ááá¯ážáá±ážáá¬ážáááºá5. ááááºážá¡ááºáá¬áá±á·á áºááŸáá·áº áááºáá±á¬ááºááŸá¯ááᯠááœá²ááŒá¬ážááŸááºážáááºážáá«á
Cloud ááááºážáááºáá±á¬ááºááŸá¯ááᯠááááºáá±á¬ááºážáá áºáá¯á¡áá±áá²á· áá»áœááºáá±á¬áºááŒááºáá«áááºá áá°ááá¯ááºážááẠááááºáá±á¬ááºážááá¯á· áááºááá·áºá¡áá¬ááá¯áááᯠáá»áááºáááºááá¯ááºááá·áºáááºá áá¯áá±á¬á· áá±á«ááºážá ááºážááá¯ááºááŒá®áLibRetro LibRetro ááẠSNESá GBAá PS áá²á·ááá¯á·áá±á¬ áá±ááºáá®ááááºážáá»á¬ážá¡ááœáẠááŸááá±á¬ááááºáž emulator interface ááᯠáá±ážáá±á¬ááºáá±á¬ááŒá±á¬áá·áº cloud ááááºážáá á¬ážááŒááºážáááºáá±á¬ááºááŸá¯ááŒáá·áº áá¯ááºáá±á¬ááºáá«áááºá6. áá»á¬ážá áœá¬áá±á¬áá á¬ážááá¬ážáá»á¬ážá áá°á á¯áá°áá±ážáá á¬ážááŒááºážááŸáá·áº ááááºážááŸáá·áºá¡áá° ááŒááºááá»áááºáááºááŒááºáž (áááºáá²áá±á¬ááá·áºááº) á¡ááœáẠá¡áááºážáá»á¬áž
CloudRetro ááẠáá±ááºáá±á¬ááºážááááºážáá»á¬ážá¡ááœáẠCrowdPlay ááŸáá·áº Online MultiPlayer áá²á·ááá¯á·áá±á¬ ááááºážá¡áá áºáá»á¬ážá áœá¬ááᯠáá¶á·ááá¯ážáá±ážáááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážááẠááá°áá®áá±á¬ááœááºáá»á°áá¬áá»á¬ážááœáẠáá°áá®áá±á¬áááºáá²ááá·áºááá·áºááºááá¯ááœáá·áºáá«áá áááºážááá¯á·ááẠáá°áá®áá±á¬ááááºážáá áºáá¯áááºáááºáá±áááºááá¯ááœá±á·ááŒááºáááŒá®áž áááºážááŸáá·áºáááºáá«áááºááá¯ááºáááºááŒá áºáááºáááá¯á·á¡ááŒááºá ááááºážááŒááºáááºáá»á¬ážááᯠcloud ááá¯ááŸá±á¬ááºááŸá¯ááœáẠááááºážáááºážáá¬ážáááºá áááºážááẠáá¯á¶ážá áœá²áá°áá»á¬ážá¡á¬áž á¡ááŒá¬ážá ááºáá á¹á ááºážáá áºáá¯áá¯ááœáẠá¡áá»áááºáááœá±áž áááºáááºáá á¬ážááá¯ááºá á±áá«áááºá
7. á¡áá»á¬ážááá¯áẠá¡ááá¯ááºážá¡áá¬
ááá±á·áá±áẠSAAS áá²á·ááá¯á·áááºá cloud ááááºážáá±á¬á·ááŒááºážááᯠá¡áá»á¬ážááá¯áẠá¡ááœááºá¡á á¬ážááŸáá á±ááẠáá®ááá¯ááºážáá¯ááºááá«áááºá ááŸáááŸáá¯ááºážáá±ážááŸá°áž-á¡áá¯ááºááá¬áž áá®ááá¯ááºážááẠááá·áºá¡á¬áž áá¬ááºá¡ááœá¬ážá¡áᬠááá¯ááá¯áááºáá±á¬ááºááŸá¯áá±ážáááºá¡ááœáẠáá¯ááºáá¬ážáá»á¬ážááᯠááá¯ááá¯ááá·áºááœááºážááá¯ááºá á±áááºááŒá áºáááºá8. cloud áá áºáá¯ááŸáá·áºáá áºáá¯áá»áááºáááºááŸá¯áááŸááá«á
CloudRetro á á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠááá°áá®áá±á¬áá±ááá»á¬ážá¡ááœáẠááá°áá®áá±á¬ cloud áááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬áž (Digital Oceaná Alibabaá á áááºááŒáá¯ááºáá¶á·ááá¯ážáá±ážáá°) ááœáẠáááºáá¶áá¬ážáááºá áá»áœááºá¯ááºááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá¡ááœáẠDocker ááœááºááááºáá¬ááœáẠáááºáááºáá±ááŒá®áž cloud áááºáá±á¬ááºááŸá¯áá±ážáá°áá áºáá¯áááºážááœáẠáá±á¬á·ááºáá»ááŒááºážááᯠááŸá±á¬ááºááŸá¬ážááẠbash script ááá¯á¡áá¯á¶ážááŒá¯áᬠááœááºáááºáááºáááºáá»á¬ážááᯠá á®á ááºáááºááŸááºáá±ážáá«áááºá áááºážááᯠWebRTC ááŸá NAT Traversal ááŸáá·áº áá±á«ááºážá ááºááŒááºážááŒáá·áº CloudRetro ááᯠáááºááá·áº cloud platform ááœááºáááᯠá¡áá¯á¶ážááŒá¯áá°á á ááºáá»á¬ážááœááºááẠá¡áá¯á¶ážááŒá¯ááẠááá¯ááºáá»á±á¬áá®ááœá±ááŸáááá¯ááºáá«áááºááááá¯áá¬áá®ááá¯ááºáž
á¡áá¯ááºááá¬áž- (ááá¯á·ááá¯áẠá¡áááºáá±á¬áºááŒáá« streaming áá¬áá¬) ááẠááááºážáá»á¬ážááᯠáá»á¬ážááŒá¬ážá á±ááŒá®áž áá¯ááºáá¶áá«áẠááá¯ááºááá¯ááºážááᯠáá¯ááºáá±á¬ááºáᬠáá¯ááºáá¯ááºáá¬ážáá±á¬ áá®áá®áá¬ááᯠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᶠáá¯ááºááœáŸáá·áºáááºá á¡áá¯ááºááá¬ážááŒá áºáááºáá»á¬ážááᯠááá¹áá¬áááŸááºážááœáẠááŒáá·áºáá±áá¬ážááŒá®áž á¡áá¯ááºááá¬ážáá áºáŠážá á®ááẠáá¯á¶ážá áœá²áá°á¡áá»á¬ážá¡ááŒá¬ážááᯠáááŒáá¯ááºáááºáááºáž ááá¯ááºááœááºááá¯ááºáá«áááºá
ááŸáááŸáá¯ááºážáá±ážááŸá°áž: streaming á¡ááœáẠá¡ááá·áºáá±á¬áºáá¯á¶áž á¡áá¯ááºááá¬ážááŸáá·áº á¡áá¯á¶ážááŒá¯áá°á¡áá áºááᯠááœá²áá±ážáááºá¡ááœáẠáá¬áááºááŸááá«áááºá ááŸáááŸáá¯ááºážáá±ážááŸá°ážááẠWebSocket ááŸáá áºááá·áº á¡áá¯ááºááá¬ážáá»á¬ážááŸáá·áº á¡ááŒááºá¡ááŸáẠáá¯á¶á·ááŒááºáááºá
ááááºážá¡ááŒá±á¡áá± ááá¯ááŸá±á¬ááºááŸá¯- ááááºážááŒááºáááºá¡á¬ážáá¯á¶ážá¡ááœáẠáááá¯á¡áá±ážááááºážá á€ááá¯ááŸá±á¬ááºááŸá¯ááẠá¡áá±ážááááºáž ááááºážáááºážááŒááºáž/áááºááŒááºážáá²á·ááá¯á· á¡áá±ážááŒá®ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
CloudRetro á ááááºáááºážáááá¯áá¬áááºáá¬á áááºááŒáá¯áẠScript
á¡áá¯á¶ážááŒá¯áá°á¡áá áºááẠá¡á±á¬ááºáá«áá¯á¶ááœááºááŒáá¬ážááá·áº á¡ááá·áº 1 ááŸáá·áº 2 ááœáẠCloudRetro ááá¯ááœáá·áºáá±á¬á¡áá«á áááŸáááá¯ááºáá±á¬áá¯ááºáá¬ážáá»á¬ážá á¬áááºážááŸáá·áºá¡áá° ááŸáááŸáá¯ááºážáá±ážááŸá°ážááᯠáááá á¬áá»ááºááŸá¬ááá¯á· áá±á¬ááºážááá¯áá«áááºá áááºážááŒá®ážáá±á¬ááºá á¡ááá·áº 3 ááœáẠclient ááẠHTTP ping áá±á¬ááºážááá¯ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºá á¬ážááŸááºá¡á¬ážáá¯á¶ážá¡ááœáẠááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááᯠááœááºáá»ááºáááºá á€ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážá á¬áááºážááᯠááŸáááŸáá¯ááºážáá±ážááŸá°ážáᶠááŒááºáááºáá±ážááá¯á·ááŒá®áž á¡áá¯á¶ážááŒá¯áá°á¡á¬áž áááºáá±á¬ááºááŸá¯áá±ážááẠá¡ááá·áºáá±á¬áºáá¯á¶áž á¡áá¯ááºááá¬ážááᯠáá¯á¶ážááŒááºááá¯ááºáááºááŒá áºáááºá á¡á±á¬ááºáá«á¡ááá·áº 4 ááááºážááá¯áááºáá®ážáá«á á¡áá¯á¶ážááŒá¯áá°ááŸáá·áº áá¬áááºáá±ážáá¬ážááá·áº á¡áá¯ááºááá¬ážááŒá¬ážááœáẠWebRTC áá¯ááºááœáŸáá·áºááŸá¯áá»áááºáááºááŸá¯áá áºáá¯ááᯠáááºáá±á¬ááºáá¬ážáááºá
á¡áá¯á¶ážááŒá¯áá° script ááᯠááá°ááŒá®ážáá±á¬ááºá¡áá¯ááºááá¬ážá¡áá²ááŸá¬ áá¬ááœá±áá«áá²á
ááááºážááŸáá·áº ááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ ááá¯ááºááá¯ááºážáá»á¬ážááᯠá¡áá¯ááºááá¬ážá¡ááœááºážááœáẠáá®ážááŒá¬ážááœá²áá¬ážáᬠááááºážáááºážáá¬ážááŒá®áž ááá¯áá±áá¬ááœáẠááááºážá¡áá»ááºá¡áááºáá»á¬ážááᯠááŒá¬ážáá¶ááŸáááá·áº áááŸááºáá«áááºá áááºááŸáááœááºá á€áááºááœááºáá±ážááᯠMemory ááŸáááá·áº áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŒááºážááŒáá·áº áá±á¬ááºááœááºáá«áááºá
Golang áááºážááŒá±á¬ááºážáá»á¬áž áá°áá®áá±á¬áá¯ááºáááºážá ááºáá áá±á¬ááºáááºážááá¯ááºááŸá¬ ááœá²ááŒá¬ážáááºáá¶ááŒááºážááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á á¡ááŒá¬ážáá¯ááºáááºážá ááºáá áºáá¯ááœáẠááááºážááᯠáá®ážááŒá¬ážááœáá·áºáá«á
á¡áá¯ááºááá¬áž á¡á áááºá¡ááá¯ááºážáá»á¬áž á¡ááŒááºá¡ááŸáẠáááŸááºááŒááºážáá¡ááá á¡á áááºá¡ááá¯ááºážáá»á¬áž-
- WebRTC- á¡áá¯á¶ážááŒá¯áá°ááá·áºááœááºážááŸá¯ááá¯áááºáá¶ááŒá®áž áá¬áá¬á០áá¯ááºáá¯ááºáá¬ážáá±á¬áá®áá®áá¬ááá¯áá¯ááºáá±ážááá·áº client á¡á áááºá¡ááá¯ááºážáá áºáá¯á
- ááááºáž emulator- ááááºážá¡á áááºá¡ááá¯ááºážá Libretro á á¬ááŒáá·áºááá¯ááºá áá»á±ážáá°ážááŒá±á¬áá·áºá á áá áºááẠáá°áá®áá±á¬áá¯ááºáááºážá ááºá¡ááœááºážááœáẠááááºážááá¯áááºáááºááá¯ááºááŒá®áž áá®áá®áá¬ááŸáá·áº á¡áááºá á®ážááŒá±á¬ááºážáá»á¬ážááᯠááŒá¬ážááŒááºáá¯ááºáá±á¬ááºááá¯ááºáááºá
- ááááºážá¡ááœááºážáá±á¬ááºáá»á¬ážááᯠáááºážáá°ááŒá®áž áá¯ááºááŒá±á¬ááºážáááááá¬ááá¯á· áá±ážááá¯á·áááºá
- áá¯ááºáá¯á¶/á¡áᶠáá¯ááºáá¶áá«ááº- áá®áá®áá¬áá±á¬ááºáá»á¬ážááᯠáá°áá±á¬ááºáᬠáá±á¬ááºáá¶ááœáẠáá¯ááºááœááºážááŒá®áž áá¯ááºáá¯ááºáá¬ážáá±á¬ áá¯á¶/á¡áá¶ááᯠáá¯ááºáá±ážááá·áº áá¯ááºáá¶áá«ááºááá¯ááºááá¯ááºážáá áºáá¯á
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯
CloudRetro ááẠWebRTC ááᯠáááºážááá»á±á¬ááá¯ážáááºážááá¬á¡ááŒá Ạá¡á¬ážááá¯ážáá¬ážáá±á¬ááŒá±á¬áá·áº Golang á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááá±á·áá¬áá® WebRTC ááá¯ááºááá¯ááºááŒá±á¬ááá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá á€áááºááŸá¬ áá±áá¬ááœáŸáá·áºááŒááºážá¡ááœáẠáá¯ááá latency ááá¯áááŸáááẠáá»áœááºá¯ááºááᯠáá»á¬ážá áœá¬á¡áá±á¬ááºá¡áá°ááŒá áºá á±ááá·áº á¡á¶á·ááŒááœááºáááºážááá¬ááŒá áºáááºá
WebRTC
WebRTC ááẠááá¯ážááŸááºážáá±á¬ APIs áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá°áááºážááá¯ááá¯ááºážá¡ááºááºáá»á¬ážááŸáá·áº ááá±á¬ááºáá¬áá»á¬ážááœáẠá¡áááºá¡ááœá±ážááŒáá·áº áááºáá°ááœááºáá°á¡áá»ááºážáá»ááºážáá»áááºáááºááŸá¯áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá
NAT Traversal
WebRTC ááẠáááºážá NAT Traversal áá¯ááºáá±á¬ááºáá»ááºááŒá±á¬áá·áº áá°áááá»á¬ážáááºá WebRTC ááẠpeer-to-peer communication á¡ááœáẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá áááºážááááºááœááºáá»ááºááŸá¬ ááœááºáá°áá»ááºážááŸááœááºáá°áá»ááºážáááºááœááºááŸá¯áᯠáá±á«áºááá·áºáá¯ááºáááºážá ááºááŸáááá·áº NAT gateways ááŸáá·áº firewall áá»á¬ážááá¯ááŸá±á¬ááºááŸá¬ážááẠá¡ááá·áºáá±á¬áºáá¯á¶áž ááá¯ááºááá¯ááºáááºážááŒá±á¬ááºážááá¯ááŸá¬ááœá±áááºááŒá áºáááºá
ICE . á€áá¯ááºáááºážá ááºá áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áºá WebRTC API áá»á¬ážááẠSTUN áá¬áá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºá á¡áá»á¬ážáá°ááŸá¬ IP ááááºá á¬ááᯠááŸá¬ááœá±ááŒá®áž áááºážá¡á¬áž áááºáá±á¬ááºážáá¬áá¬ááá¯á· áá±ážááá¯á·áá« (áááºááẠ) ááá¯ááºááá¯ááºáá»áááºáááºááŸá¯ááᯠááááºáá±á¬ááºááá¯ááºáá±á¬á¡áá«áááá¯á·áá±á¬áº CloudRetro ááẠá€á¡ááºá¹áá«áááºááᯠá¡ááŒáá·áºá¡áá¡áá¯á¶ážáá»ááŒááºážáááŸááá«á áááºážá peer-to-peer áá»áááºáááºááŸá¯áá»á¬ážááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááŒá¬ážááœáẠáááŸááá±á¬áºáááºáž á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááŸáá·áº cloud áá¬áá¬áá»á¬ážááŒá¬ážááœáẠááŸááá±áá«áááºá áá±á¬áºáááºááá¬áá¬áááºááŒááºážááœáẠáá¯á¶ááŸááºá¡áá¯á¶ážááŒá¯áá°á ááºáá á¹á ááºážááẠááá¯ááºááá¯ááºáááºááœááºááŸá¯ ááá·áºáááºáá»ááºáá»á¬áž áááºážáá«ážáááºá áá¬áá¬ááẠNAT áá±á¬ááºááœááºááœáẠáááŸááá±á¬ááŒá±á¬áá·áº áááºážááẠá¡áááºáá±á«ááºáá»á¬ážááᯠááŒáá¯áááºááœáá·áºááẠááá¯á·ááá¯áẠá¡áá»á¬ážáá°ááŸá¬ IP ááááºá á¬áá»á¬ážááᯠááá¯ááºááá¯ááºá¡áá¯á¶ážááŒá¯ááẠááœáá·áºááŒá¯áááºá
ááááºá ááá±á¬áá»ááºááᯠCloud Gaming á¡ááœáẠááááºážááŒáá·áºáá»á®áá±ážááááºáá±á¬ááºážá¡ááŒá ẠááŒá±á¬ááºážáá²áá»ááºáá²á·áááºá á¡áá¯ááºáá®áá¬ááŸá¬ ááááºážáááºáá®ážáá°áá»á¬ážá¡á¬áž ááááºážáá»á¬ážááŸáá·áº ááá¯ááºááá¯ááºááŒáá·áºááŸá¯ááŒááºážááá¯ááºáᬠá¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá¶á·ááá¯ážááœáá·áºááŒá¯áááºááŒá áºáááºá áá¯á¶ážá áœá²áá°áá»á¬ážááẠáááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážááŸáá·áº ááá¯ááºááá¯áẠááááœá±á·áááºáá¶ááá¯ááºáááºááŒá áºáááºá á€áááá¯áá»á¯ááºááá¯ááºááŸá¯áá»áŸá±á¬á·áá»ááá·áºáá¯á¶á á¶ááœáẠCloudRetro ááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááŸáá·áº ááŒááºáááŸáá¯ááºááœáŸáá·áºááŒááºážááá¯ááºáá¬á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá»áááºáááºáááºá¡ááœáẠáá°áá±á¬ááºáá áºáá¯áá»áŸáá¬ááŒá áºááŒá®áž áááºážááᯠáááºáá¶áá»ááºážáááŒááºážáááŒá¯áá±á¬á·ááá·áºá¡áá« ááá¯ááá¯á¡ááœááºá¡á á¬ážááá¯ááá¯ááœááºáá°á á±áááºá WebRTC NAT Traversal á á¡áááºážááá¹áááẠááŒááºáá¡ááœá²á·á¡á ááºážá០ááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŒááºážááá¯ááºáᬠá¡áááºážá¡ááŒá áºáá»á¬ážáá±á«áºááœáẠáááºáá°ááœááºáá°á¡áá»ááºážáá»ááºážáá»áááºáááºááŸá¯ á¡á ááŒá¯ááŒááºážááᯠááœááºáá°áá»á±á¬ááœá±á·á á±áááºá¡ááœáẠá¡ááœááºá¡áá±ážááŒá®ážááŒá®áž áááºáá®ážáá°á¡á¬áž ááœááºáááºááá¯á·áá»áááºáááºááẠááá¯ááá¯ááœááºáá°á á±áááºá
áá®áá®ááá¯áá»á¯á¶á·
áá®áá®ááá¯áá»á¯á¶á·ááŒááºážááẠááá¯ááºááá¯ááºážá áááŸááááŒá áºááá¯á¡ááºáá±á¬ á¡á áááºá¡ááá¯ááºážááŒá áºááŒá®áž áá»á±á¬ááœá±á·áá±á¬ á á®ážáááºážááŸá¯ááᯠáá»á¬ážá áœá¬á¡áá±á¬ááºá¡áá°ááŒá¯áááºá VP8/H264 áá®áá®ááá¯áá¯ááºááœááºážááŒááºážá á¡áá±ážá áááºá¡áá»ááºá¡áááºááá¯ááºážááᯠáááááºáááá¯á¡ááºáá±á¬áºáááºážá ááá±á¬ááá¬ážáá»á¬ážááᯠáá¬ážáááºááŒááºážááŒáá·áº áá®áá®ááá¯áá¯ááºááœáŸáá·áºááŸá¯á¡ááŒááºááŸá¯ááºážááœá±ážáá»ááºá áá¬áá»á¬ážá áá»áŸá±á¬áºááá·áºááá¬ážáá±á¬á¡ááŒá¯á¡áá°áá»á¬ážááᯠá¡ááŸá¬ážááŸá¬ááŒááºáááºááŸáá·áº latency ááá¯áá»áááºááŸáááẠáá°áá®áá±ážááá¯ááºáá«áááºá
ááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŒááºážáááºáá±á¬ááºááŸá¯á¡ááœáẠáá®áá®ááá¯ááᯠáá»á¯á¶á·ááŒááºážááẠá áááºáá±á«áºááŸá¯ááŒá áºááŒá®áž á¡ááºáááá¯áá®áááºááẠá á¯á á¯áá±á«ááºážáá¯ááºááœááºážáá»ááẠ+ ááœááºáááºáá¯ááºááœáŸáá·áºáá»ááẠ+ áá¯ááºááœáá·áºáá»áááºááᯠáááºááá¯ááºááá»áŸáááºážááŒá±á¬ááºáž áá±áá»á¬á á±ááááºááŒá áºáá«áááºá ááá¯á·á¡ááŒááºá coding áá¯ááºáááºážá ááºááẠáááááºáááºážááŸáá·áº áááºááá¯ááºááŒá áºááááºá á¡áá»áá¯á·áá±á¬ áá¯ááºááŒá±á¬ááºážááŒááºážáá»á¬ážááẠá¡áá»á¯á¶ážáááºáááºááá¯ááºáá«âá¥ááá¬á áá±ážáááºáá±á¬ ááá¯ááºá¡ááœááºá¡á á¬ážááŸáá·áº áá¯ááºááœáá·áºáá»áááºáá»á¬ážááẠááŸááºáá»á¬ážáá±á¬ áá¯ááºááŒá±á¬ááºážáá»áááºáá»á¬ážááᯠááŸá áºáááºá áááá«á ááá¯á·ááá¯áẠáááá¯ááºáá®áá±á¬ áá»á¯á¶á·ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«á
áá®áá®ááá¯áá»á¯á¶á·ááŒááºážáá±á¬ááºááœááºá á¡áá°á¡áááŸá¬ áá¯á¶ážá áœá²áá°áá»á¬ážá¡ááœáẠáááºáá¶ááá¯ááºáá±á¬ áááá»ááŸá¯á¡ááá·áºááᯠááááºážááááºážáá¬ážá áẠáááá¯á¡ááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºááŸá¬ážáá áºáááºááŒá áºáááºá áá áºáŠážáá»ááºážá á® áá¯á¶ááá¹áá¬ááºáá±á¬ááºáá»á¬ážááᯠáá¯ááºááœááºážááŒááºážá¡ááŒááºá algorithm ááẠááááºááŸáá·áº áá±á¬ááºáá áºáá¯á០áááºááŸá frame ááᯠááá¯ážáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·á ááœá¬ááŒá¬ážáá»ááºááá¯áᬠáá±ážááá¯á·áá«áááºá Pacman ááŒáá·áº á¥ááá¬á¡á¬ážááŒáá·áº ááŒááºááá¯ááºáááºá¡ááá¯ááºážá ááœá²ááŒá¬ážáá±á¬á¡áá»ááºáá»á¬ážáᬠáá¯ááºááœáŸáá·áºáááºá
ááá°áá¬á¡ááŒá ẠPacman ááá¯á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ áá®áá®ááá¯áá±á¬ááºáá»á¬ážááᯠááŸáá¯ááºážááŸááºááŒááºážáá¡áá¶áá»á¯á¶á·
á¡áá¬ážáá°á á¡áá¶áá»á¯á¶á·ááŸá¯ á¡ááºáááá¯áá®áááºááẠáá°áá¬ážáá»á¬áž áá¬ážááááºááá¯ááºáá±á¬ áá±áá¬áá»á¬ážááᯠáá»ááºááŸááºáá¬ážáááºá Opus ááẠáááºááŸáááœáẠá áœááºážáá±á¬ááºáááºá¡áá±á¬ááºážáá¯á¶áž á¡áá¶áá¯ááºáááºááŒá áºáááºá áááºážááẠRTP (Real Time Transport Protocol) áá²á·ááá¯á· á¡áááá·áºáá±ážáá¬ážáá±á¬ datagram protocol áá áºáá¯á០á¡áá¶ááŸáá¯ááºážáá áºáᯠáá¯ááºááœáŸáá·áºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá áááºážá latency ááẠmp3 ááŸáá·áº aac áááºáááá·áºááŒá®áž á¡áááºá¡ááœá±ážá ááá¯ááŒáá·áºáááºá latency ááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº 5 ~ 66,5ms áááºážáá»ááºááŒá áºáááºá
Golang ááŸá Pioná WebRTC
pawn WebRTC ááᯠGolang ááá¯á· áá°áá±á¬ááºáá¬áá±ážáá±á¬ open source ááá±á¬áá»ááºáá áºáá¯ááŒá áºáááºá áá°áááºáž C++ WebRTC á á¬ááŒáá·áºááá¯ááºáá»á¬ážá áá¯á¶ááŸááºá¡ááá¯ááºáž áá¯ááºááá¯ážááŒááºážá¡á á¬áž Pion ááẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬á áœááºážáá±á¬ááºáááºá Go áá±á«ááºážá ááºážááŸá¯ááŸáá·áº WebRTC áááá¯ááá¯áá±á¬áá»á¬ážááœáẠáá¬ážááŸááºážááááºážáá»á¯ááºááŸá¯ááŒáá·áº WebRTC á áá°áááºáž Golang á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá áºáá¯ááŒá áºáááºááá áºáá»á áºááá¯ááºááẠá áá¹ááá·áºááœá²ááŒá¬áá±áá»áááºááŒáá·áº áá±á¬ááºážááœááºáá±á¬ built-in á¡ááŒá±á¬ááºá¡ááŒá¬ážááŒáá·áº ááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ááá¯áááºáž áá¯ááºáá±á¬ááºááá¯ááºáááºá áááºážááœáẠSTUNá DTLSá SCTP á áááºááŒáá·áº áááºážáááá¯ááºááá¯áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ ááŸááá«áááºá QUIC ááŸáá·áº WebAssembly ááŸáá·áº á¡áá»áá¯á·áá±á¬ á ááºážáááºááŸá¯áá»á¬ážá ဠopen source á á¬ááŒáá·áºááá¯ááºááá¯ááºááá¯ááºá á¡ááœááºáá±á¬ááºážááœááºáá±á¬ á á¬ááœááºá á¬áááºážáá»á¬ážá ááœááºáááºáááá¯ááá¯áá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááŸáá·áº ááá°áá¬áá±á¬ááºážáá»á¬ážáá«ááŸááá±á¬ á¡ááŸááºáááẠáá±á¬ááºážááœááºáá±á¬ áááºáá°ááŸá¯á¡áááºážá¡ááŒá áºáá áºáá¯ááŒá áºáááºá
á¡ááœááºá áááºá¡á¬ážáááºáááºáá±á¬áááºáá®ážáá°ááŸáŠážáá±á¬ááºááá·áº Pion á¡ááá¯ááºážá¡ááá¯ááºážááẠWebRTC ááŸáá·áºáááºáááºáá±á¬ á¡áááºá¡ááœá±ážááá¯ááºáᬠááœá±ážááœá±ážááŸá¯áá»á¬ážá¡áá»á¬ážá¡ááŒá¬ážááŒá¯áá¯ááºáá»ááºááŸáááŒá®áž á¡ááœááºáááºááŒáœáá±áá«áááºá áá®áááºážááá¬ááᯠá áááºáááºá á¬ážááẠJoin ááá¯ááºáá«á
http://pion.ly/slack - áááºáᬠá¡áá áºá¡áááºážááœá± á¡áá»á¬ážááŒá®áž áááºáá°ááááá·áºáááºáGolang ááœáẠCloudRetro áá±ážááŒááºážá
Go in á¡áá¯ááºááá¬ážáá áºáŠážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááá¯ááºáá±á¬ááºáá»ááºááŸá áá»ááºáááºáá»á¬ážááᯠááœá¬ážáá«á
Go á ááŸááá±á¬ áá»ááºáááºáá®ááá¯ááºážááŒá±á¬áá·áºá ááœá²ááŒáá·áºááŸá¯ááŒááºážááŸáá·áº ááœá±ááŒá±ážááá¯ááºáᬠááŒá¿áá¬áá»á¬ážááẠá¡ááœááºááá¯ážááŸááºážáá«áááºá áá¯á¶ááœááºááŒáá¬ážááá·áºá¡ááá¯ááºážá ááá°áá®áá±á¬ GoRoutines ááœáẠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºáá±ááá·áº á¡á áááºá¡ááá¯ááºážáá»á¬ážá áœá¬ááŸááááºá á¡á áááºá¡ááá¯ááºážáá áºáá¯á á®ááẠáááºážáá¡ááŒá±á¡áá±ááᯠá á®áá¶ááá·áºááœá²ááŒá®áž áá»ááºáááºáá»á¬ážááŸáá áºááá·áº áááºááœááºáááºá Golang áááœá±ážáá»ááºáá¬ážáá±á¬ááŒá±á¬ááá¯áá»ááºááẠááááºážááœááºá¡áá»áááºááá¯ááºážááœáẠá¡áá¯ááŒá°ááŒá áºáááºáá áºáá¯á¡á¬áž áá¯ááºáá±á¬ááºááẠááœááºážá¡á¬ážáá±ážááẠ(ááááºážá¡ááŸááºá¡áá¬áž)á ááá¯ááá¯áááºááŸá¬ á€áá®ááá¯ááºážá¡ááœáẠáá±á¬á·ááºáá»ááẠáááá¯á¡ááºáá«á á¥ááá¬á¡á¬ážááŒáá·áºá á¡áá¯á¶ážááŒá¯áá°áá áºáŠážá ááááºážáááºážáá±á¬á¡áá«á ááááºážá¡ááŒá±á¡áá±á áá»áŸááºáá áºááŒááºáá¯á¶á¡ááŒáá·áºá¡á á¯á¶ ááá¯á¡ááºáááºá ááááºážáááºážááŸá¯ááŒá®ážááŒá±á¬ááºáááºá¡áá á€á¡ááŒá±á¡áá±ááẠáááºááá¯ááºááŸááá±ááá·áºáááºá ááááºážá¡ááŸááºá¡áá¬ážáá áºáá¯á á®ááœááºá áá±á¬ááºááœááºááŸááẠááááºážáááºážááŒááºáž ááá¯á·ááá¯áẠááá·áºááœááºážááŒááºážáá¯ááºáá±á¬ááºáá»ááºááá¯áᬠáá¯ááºáá±á¬ááºááá¯ááºááŒá®áž áá¯ááºáááºážá ááºááᯠáá¯á¶ááŒá¯á¶á á±áá«áááºá
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 áá»ááºáááºááẠáá áºááŒáá¯ááºáááºáááºáž áá»áááºáááºáá¬ážáá±á¬ ááŒá áºáááºáá»á¬ážááᯠááá¯ááºááœááºááẠááá¯ááá¯ááœááºáá°ááá·áºáááºážáááºážáá áºáá¯ááŒá áºáá±á¬áºáááºáž áá»ááºáááºááẠá¡áá±á¬ááºážáá¯á¶ážá áœááºážáá±á¬ááºáááºááᯠááá±ážááá¯ááºáá«á áá»ááºáááºá¡á±á¬ááºááœáẠááŸá¯ááºááœá±ážáá±á¬ ááááºááá¯á·ááŒááºážááá¯ááºáᬠáá¯áá¹ááááŸááá«áááºá ááá¯á·ááŒá±á¬áá·áº á áœááºážáá±á¬ááºáááºááá¯áá±á¬ááºážá¡á±á¬áẠáá»ááºáááºáá»á¬ážááᯠá¡á á¬ážááá¯ážááá·áºá¡áá« áá±á¬á·ááá±á¬ááºáá»á¬ážááŸáá·áº á¡áá¯ááŒá°áááºááá¯ážáá»á¬ážááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡ááœáẠááŒá¯ááŒááºááŒá±á¬ááºážáá²ááŸá¯á¡áá»áá¯á· ááŒá¯áá¯ááºáá²á·áááºá
ááá¯á·á¡ááŒááºá Golang ááŸá á¡ááŸáá¯ááºááááºážáá°ááᯠá á®áá¶ááá·áºááœá²ááŒááºážáááŒá¯áá² áá áºáá«áá áºáᶠáá¶ááááŒá áºááœááºá¡ááŒá¬ááŒá®áž áá±áá¹ááááºááœá¬ážááá¯ááºáááºá áááºážááẠá¡áá»áááºááŸáá·áºáá áºááŒá±ážáá® ááá¯ááºááá¯ááºááŒáá·áºááŸá¯ááŒááºážá¡ááºááºááᯠá¡ááœááºá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá áºá á±áááºá
COG
ááá±á¬áá»ááºááẠáá®áá®áá¬áá»á¯á¶á·ááŒááºážááŸáá·áº ááááºáž emulators á¡ááœáẠLibretro á¡ááœáẠááŸáááŒá®ážáá¬áž open source Golang VP8/H264 á á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯áááºá á€á á¬ááŒáá·áºááá¯ááºáá»á¬ážá¡á¬ážáá¯á¶ážááẠGo ááá¯á¡áá¯á¶ážááŒá¯á C á á¬ááŒáá·áºááá¯ááºááá¯ááºááá¯ážááŸá¯áá»á¬ážááŒá áºáááºá
COG . á¡á¬ážáááºážáá»ááºá¡áá»áá¯á·ááᯠáá±á¬áºááŒáá¬ážáá«áááºáDave Cheney áá€ááá¯á·á Ạ. áá»áœááºáá±á¬áºááŒá¯á¶ááœá±á·áá²á·ááá²á· ááŒá¿áá¬áá»á¬áž- Golang RecoveryCrash ááŸáá·áºááẠCGO ááœááºáá»ááºáá»ááŸá¯ááá¯ááááºážááá¯ááºáá«á
- áá»áœááºá¯ááºááá¯á·ááẠCGO ááœááºá¡áá±ážá áááºááŒá¿áá¬áá»á¬ážááᯠááŸá¬ááœá±ááœá±á·ááŸáááá¯ááºáá±á¬á¡áá« á áœááºážáá±á¬ááºáááºááá¯ááºáᬠááááºááá¯á·ááŸá¯áá»á¬ážááᯠáá±á¬áºáá¯ááºááẠáá»ááºááœááºááŒááºážá
áá±á¬ááºáá»ááº
áá»áœááºá¯ááºááẠcloud ááááºážáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¬ážáááºááŒá®áž á¡áœááºááá¯ááºážááœáẠáá»áœááºá¯ááºááá°áááºáá»ááºážáá»á¬ážááŸáá·áº ááœááºážááœááºááœáẠáá±ááºáá±á¬ááºážááááºážáá»á¬ážááᯠáá á¬ážááá¯ááºá á±ááẠáá°áá®áá±ážááá·áº ááááºáá±á¬ááºážáá áºáá¯ááᯠáááºáá®ážááẠáá»áœááºá¯ááºááááºážááá¯ááºááᯠá¡á±á¬ááºááŒááºáá²á·áááºá Pion á á¬ááŒáá·áºááá¯ááºááŸáá·áº Pion á¡ááá¯ááºážá¡ááá¯ááºážá áá¶á·ááá¯ážáá°áá®ááŸá¯áááŸááá² á€ááá±á¬áá»ááºááẠáááŒá áºááá¯ááºáá«á áááºážá á¡ááŒáááºá¡ááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠá¡áá°ážááẠáá»á±ážáá°ážáááºááŸááá«áááºá WebRTC ááŸáá·áº Pion á០áá¶á·ááá¯ážáá±ážáá±á¬ ááá¯ážááŸááºážáá±á¬ API áá»á¬ážááẠáá»á±á¬ááœá±á·á áœá¬ áá±á«ááºážá ááºááŸá¯ááᯠáá±áá»á¬á á±áááºá áá»áœááºá¯ááºá ááááá¯á¶áž á¡áá°á¡á á¡áá±á¬ááºá¡áá¬ážááᯠáá°áá®áá±á¬ á¡áá»ááºážáá»ááºáž á¡ááŒááºá¡ááŸáẠáááºááœááºááŸá¯ (P2P) ááá¯ááºáᬠááŒáá¯áááá¬ážááŒááºáž áááŸááá±á¬áºáááºáž ááá¯áá®áááºážáááºááœááºááẠáá¯ááºááŒááºáá²á·áá«áááºá
áá±á«ááºážá ááºážáááºááœááºáá°áá±á¬áºáááºáž P2P streaming ááẠá¡ááŸááºááááºááẠááœááºáá»á°áá¬áááá¹áá¶ááœáẠá¡ááœááºááŸá¯ááºááœá±ážáá±á¬áááºáááºáá áºáá¯ááŒá áºáááºá áá°ááẠpeer-to-peer session áá áºáá¯áááºáá®ážááẠIP ááŸáá·áº NAT áá²á·ááá¯á·áá±á¬ áá¬áááŒá¬ááŸááºá áœá¬ áááºááŸááá±áá±á¬ ááœááºáááºáááºáá±á¬ááºáá¯á¶áá»á¬ážá ááŸá¯ááºááœá±ážááŸá¯ááᯠááá¯ááºááœááºááŒá±ááŸááºážááááºááŒá áºáááºá á€ááá±á¬áá»ááºááᯠáá¯ááºáá±á¬ááºáá±á ááºááœáẠááœááºáááºáá»áááºáááºááŒááºážááŸáá·áº á áœááºážáá±á¬ááºááẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááŒááºážááá¯ááºáᬠá¡ááá¯ážáááºá¡ááááá¬áá»á¬ážá áœá¬ááᯠáá»áœááºá¯ááºáááŸááá²á·áááºá ááá¯á·ááŒá±á¬áá·áº áá°ááá¯ááºážááᯠWebRTC áá¯á¶ážááŒá®áž P2P áá¯ááºáá¯ááºáá»á¬ážááᯠááŒáá¯ážá á¬ážáááºáá±á¬ááºááẠááá¯ááºááœááºážáá«áááºá
CloudRetro ááẠretro ááááºážáá á¬ážáá°á¡áá±ááŒáá·áº áá»áœááºá¯ááºáá»áŸá±á¬áºááŸááºážáá¬ážáá±á¬ á¡áá¯á¶ážááŒá¯ááŸá¯ááá á¹á á¡á¬ážáá¯á¶ážááᯠááŒáá·áºáááºážáá±ážáá«áááºá ááá¯á·áá±á¬áºáááºážá ááœááºáááºááᯠááá¯ááá¯áá¯á¶ááŒááºá áááºáá»áááŒá®áž á áœááºážáá±á¬ááºáááºááŒáá·áºáá¬ážá á±áááºá á¡áááºá¡ááœá±ážááŒáá·áº ááááºážááááºáá áºáá»á¬áž áá¶á·ááá¯ážáá±ážááŒááºáž ááá¯á·ááá¯áẠáá¯á¶ážá áœá²áá°áá»á¬ážá¡ááŒá¬áž ááááºážáá»á¬ážááᯠáá»áŸáá±ááá¯ááºááŸá¯áá²á·ááá¯á·áá±á¬ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááá¯ááºááá·áº ááá±á¬áá»ááºááœáẠáááºáááºáá»á¬ážá áœá¬ááŸááá±áááºáᯠáá»áœááºáá±á¬áºáááºáá«áááºá áá®á¡ááœáẠáá»áœááºáá±á¬áº ááŒáá¯ážá á¬ážáá¯ááºáá±á¬ááºáá±áá«áááºá ááá¯ááºáá¬áá«á
á á®áá¶ááááºáž ááŒáá¯ááºááẠá¡á¬ážáá±ážáá«á
source: www.habr.com