Project Stream は WebRTC を使っている

Google の Project Stream のテストプレイが解禁になったようです。知り合いが当選していたので早速 chrome://webrtc-internals を打ってもらい、ログをもらいました。

結論としては Project Stream は WebRTC を利用しています。

知り合いがからログを貰ったので貼っておきます。色々削ってあります。

m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=mid:audio
a=sendrecv
a=rtpmap:111 opus/48000/2
m=video 9 UDP/TLS/RTP/SAVPF 107 96
a=mid:video
a=recvonly
a=rtpmap:107 H264/90000
a=rtcp-fb:107 transport-cc
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=107
m=application 9 DTLS/SCTP 5000
a=mid:data
a=sctpmap:5000 webrtc-datachannel 1024

MediaChannel と DataChannel 両方使っています。おそらくコントローラーからの情報を DataChannel で送り、サーバからの映像を MediaChannel で受け取ってるんでしょう。

映像コーデックは H.264 で、音声コーデックは Opus です。どうでもいいですが Plan B で Unified Plan ではありません。

googFrameHeightReceived    1080
googFrameRateDecoded 60
googFrameRateOutput 60
googFrameRateReceived 60
googFrameWidthReceived 1920

解像度は 1920x1080 のフル HD で FPS が 60 です。これは知り合いの PC の解像度がフル HD だったからで、本来は 4K とか出るのかもしれません。

仕組みを妄想すると、基本的に P2P で動いているのだと思います。とはいえ Google 側にゲームレンダリングサーバがあり、そこが DataChannel で送られてきたデータを受け取り、それでゲームを動かしてその結果をレンダリングし、H.264 に変換し MediaChannel でサーバから投げつけてくるという仕組みだと思います。

簡単に書いてますが自分で作れと言われても作れないのでなんともですが … 。

YouTube に実際にプレイしている人の動画が上がっていましたが、ほぼ遅延がない感じでした。WebUSB を使ったコントローラ対応なんでしょうか。この辺は詳しくないのでわかりません。

Nintendo Switch でも実際にクラウドゲーミングが体験できるらしいです。専用端末ではなく Chrome というブラウザで実現した Project Stream はとても凄いと思います。

WebRTC の超低遅延を活かした仕組み、本当に凄いです。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store