SlideShare uma empresa Scribd logo
1 de 19
Space Sweeper + Genvid + Twitch
視聴者を参加者にしてしまう技術
中嶋謙互
2019 Apr 19
Space Sweeper : 超高速4P弾幕地獄シューティング
kknn.itch.io/spsw
Space Sweeper ゲームdemo (skipped)
• XBOX 360コントローラー x 4 Split Screen
実況の視聴者がゲームに参加するとは?
• Twitchの視聴者が、 Twitch Extensionを操作して、
• 見ている最中のゲームにアイテムを送り込む
SpaceSweeper + Genvid + Twitch Extension
• Pay 2 Troll のデモ (skipped)
構成図
video 1Mbps
Twitch extension
video
pixel + data
1Gbps
Game
game data
control
control
Twitch
開発のパート、スケジュール
• Space Sweeper ゲーム (中嶋)
• すでにできているゲームにGenvid SDKを組み込み: 1ヶ月
• Twitch Extension (Aizawa)
• ショップ画面、アイテム配置UIの実装に2ヶ月
※他の作業もやりながらなので実質数日
※Web側UIの実装自体は数日だが、本番環境とTwitchサービスへのデプロイに時間がかかった
Twitch Extension
開発手順
1.AWSにg2.xlargeマシンを1台確保する。
2.Genvid SDKをインストールする。(中嶋)
3.ゲームコードにSDKを組み込む。(中嶋)
4.Twitch ExtensionのJSコードを実装する。(Aizawa)
5.ローカルでテストする。(中嶋/Aizawa)
6.完成したものをGenvidチームに渡す
7.本番環境を稼働 (Genvid)
Parsec で開発環境を共有
ローカル開発環境
Parsec AMI instance
genvid
server
genvid
encoder
カメラ座標
ピクセル+音声サンプリングデータ
カメラ座標
put_item
映像
Twitch オーバーレイ
Twitch Extensionコード(600行)の概要
• script src=“genvid.min.js”
• genvidClient = genvid.createGenvidClient()
• genvidClient.onDraw( function(frame) {
setCamera(frame.gamedata.camera);
});
• canvas.addEventListener(“click”, (event) =>
{
request.send( {“command”:”put_item”,
“x”:x,”y”:y});
});
JSON
• ゲームサーバ>genvid>ブラウザ
• カメラ座標の更新
• {“type”:”camera”,”x”:1404,”y”:910,”width”:510,”height”:380}
• APを出現させる
• {“type”:”new_ap”,”x”:1300,”y”:771,”amount”:10}
• ブラウザ>genvid>ゲームサーバ
• アイテムを置く
• {“gx”:44,”gy”:23,”item_type”:3303,”name”:”Nakajima”}
ゲームコードの概要 (追加分:200行)
•int main() {
gameInit();
genvidInit();
while(!done) {
gameUpdate();
gameRender();
genvidUpdate();
}
gameFinish();
genvidFinish();
}
genvidInit()
• Genvid_Initialize()
• Genvid_CreateStream()
• audio
• video
• gamedata
• Genvid_Subscribe( “put_item”, callbackFunc)
• Genvid_SetParameterInt()
• videostream, pixel format, width, height
genvidUpdate()
• glReadPixels(0, 0, w,h, GL_RGB,
GL_UNSIGNED_BYTE, 0);
• memcpy(g_pixels, ptr, pbo_size);
• GenvidTimecode tc =
Genvid_GetCurrentTimecode();
• gs = Genvid_SubmitVideoData(tc,
sStream_Video.c_str(), g_pixels,
sizeof(g_pixels));
• SubmitGameData()
• Genvid_CheckForEvents();
ビデオエンコードCPU負荷
• AWS g2.xlarge インスタンス
• ゲーム自体は1スレッド実装
• 1280x720 x 3bytes x 60frames x 8bit = 1.23Gbps
• OpenGLキャプチャとmemcpy、Genvid_SubmitVideoData全部でCPU負荷
が10~15%増加。 DirectXであれば10%以下
• genvid encoderプロセスはCPU20%~30%程度
• 送信される映像は1〜3Mbps
「クラウドゲームをつくる技術」
2018年9月20日刊行
クラウドゲーミング(ゲームストリーミング)
の技術を体系的に整理し、
クラウドゲーム時代のビデオゲーム開発が
どう変化するかをコードのレベルまで
詳しく解説しています。

Mais conteúdo relacionado

Mais procurados

ニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメ
NIFTY Cloud
 

Mais procurados (13)

超初心者向けハンズオン講座 「ゼロから始めるQGIS」 準備手順書
超初心者向けハンズオン講座 「ゼロから始めるQGIS」 準備手順書超初心者向けハンズオン講座 「ゼロから始めるQGIS」 準備手順書
超初心者向けハンズオン講座 「ゼロから始めるQGIS」 準備手順書
 
もっとも簡単なKubernetes構築 on Raspberry pi (July tech festa winter 2021)
もっとも簡単なKubernetes構築 on Raspberry pi  (July tech festa winter 2021)もっとも簡単なKubernetes構築 on Raspberry pi  (July tech festa winter 2021)
もっとも簡単なKubernetes構築 on Raspberry pi (July tech festa winter 2021)
 
GitHubEnterpriseからBitbucket(Stash) への移行事例
GitHubEnterpriseからBitbucket(Stash) への移行事例GitHubEnterpriseからBitbucket(Stash) への移行事例
GitHubEnterpriseからBitbucket(Stash) への移行事例
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
消滅都市5周年の運営を支えた技術とその歴史
消滅都市5周年の運営を支えた技術とその歴史消滅都市5周年の運営を支えた技術とその歴史
消滅都市5周年の運営を支えた技術とその歴史
 
SEゼミ2015 - OSS Hack Weekend - 1日目のまとめ
SEゼミ2015 - OSS Hack Weekend - 1日目のまとめSEゼミ2015 - OSS Hack Weekend - 1日目のまとめ
SEゼミ2015 - OSS Hack Weekend - 1日目のまとめ
 
Gcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown scriptGcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown script
 
GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)
 
QGIS講習会【印刷編】
QGIS講習会【印刷編】QGIS講習会【印刷編】
QGIS講習会【印刷編】
 
ニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメ
 
AWS re:Invent 2014 & シリコンバレーレポート
AWS re:Invent 2014 & シリコンバレーレポートAWS re:Invent 2014 & シリコンバレーレポート
AWS re:Invent 2014 & シリコンバレーレポート
 
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
 
2021/5/13 IoTLT vol75 kitazaki v1
2021/5/13 IoTLT vol75 kitazaki v12021/5/13 IoTLT vol75 kitazaki v1
2021/5/13 IoTLT vol75 kitazaki v1
 

Semelhante a 視聴者を参加者にしてしまう技術

Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 

Semelhante a 視聴者を参加者にしてしまう技術 (20)

わんくま勉強会東京#67 LT資料
わんくま勉強会東京#67 LT資料わんくま勉強会東京#67 LT資料
わんくま勉強会東京#67 LT資料
 
Kinect for Windows v2
Kinect for Windows v2Kinect for Windows v2
Kinect for Windows v2
 
GCS2014 TMCN
GCS2014 TMCNGCS2014 TMCN
GCS2014 TMCN
 
TMCN Vol 8
TMCN Vol 8TMCN Vol 8
TMCN Vol 8
 
インタラクティブ・ストリーミングが変えるゲームコンテンツの未来
インタラクティブ・ストリーミングが変えるゲームコンテンツの未来インタラクティブ・ストリーミングが変えるゲームコンテンツの未来
インタラクティブ・ストリーミングが変えるゲームコンテンツの未来
 
Kinect導入講座
Kinect導入講座Kinect導入講座
Kinect導入講座
 
MVP Community Camp
MVP Community CampMVP Community Camp
MVP Community Camp
 
大規模ライブ配信の苦労ポイント
大規模ライブ配信の苦労ポイント大規模ライブ配信の苦労ポイント
大規模ライブ配信の苦労ポイント
 
UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座
 
Genvid japan-2020-1 FGDC
Genvid japan-2020-1 FGDC Genvid japan-2020-1 FGDC
Genvid japan-2020-1 FGDC
 
ウェアラブルデバイスとモーションセンサーの融合
ウェアラブルデバイスとモーションセンサーの融合ウェアラブルデバイスとモーションセンサーの融合
ウェアラブルデバイスとモーションセンサーの融合
 
Unity + Twitch Extensionsを使って動画配信
Unity + Twitch Extensionsを使って動画配信Unity + Twitch Extensionsを使って動画配信
Unity + Twitch Extensionsを使って動画配信
 
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGUnityでつくるはじめてのPONG
UnityでつくるはじめてのPONG
 
Kinect for windows sdk introduction
Kinect for windows sdk introductionKinect for windows sdk introduction
Kinect for windows sdk introduction
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsugアカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
 
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
 
【Unite Tokyo 2018】ゲーム体験を共有する最新テクノロジ NVIDIA HighlightsとANSEL
【Unite Tokyo 2018】ゲーム体験を共有する最新テクノロジ NVIDIA HighlightsとANSEL【Unite Tokyo 2018】ゲーム体験を共有する最新テクノロジ NVIDIA HighlightsとANSEL
【Unite Tokyo 2018】ゲーム体験を共有する最新テクノロジ NVIDIA HighlightsとANSEL
 
Practical game development with Stingray
Practical game development with StingrayPractical game development with Stingray
Practical game development with Stingray
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
 

視聴者を参加者にしてしまう技術