Slide 1

Slide 1 text

OBSのプラグイン 作ってみた 2014/08/11 吉村 総一郎 ( ) @sifue

Slide 2

Slide 2 text

twitch って知ってますか?

Slide 3

Slide 3 text

twitchとは 月4300万視聴者を誇る世界一のe-sports/ゲーム生放送配信サービス 2011年にストリーミングサービスjustinからゲーム専門にスピンオフ 先週justinの方がサービス終了してtwitchに専念することが発表された

Slide 4

Slide 4 text

e-sportsって 知ってますか?

Slide 5

Slide 5 text

格ゲーとかサッカーの ゲームのこと?

Slide 6

Slide 6 text

と思いきや最近は、 リアルタイムストラテジー(RTS) トレーディングカード(TCG) ファーストパーソンシューティング(FPS) がほとんど

Slide 7

Slide 7 text

中でも世界最大ユーザー数を誇る e-sportsゲームタイトル

Slide 8

Slide 8 text

League of Legends (通称:LoL)

Slide 9

Slide 9 text

LoLとは WindowsとMacでプレイすることができる基本無料の5対5で戦うRTS 2014年1月時点、ひと月のプレイヤー数が6700万人、日ごとの最大同時接 続プレイヤー数750万人 (参考:将棋の推定競技人口600万人) 現在プロリーグが存在する他、2013年時点の大会の優勝賞金は100万ド ル。世界大会の同時視聴者数は32万人(米Wikipeiaより)。 左の写真は世界大会の様子、右の写真はプロチームCloud9

Slide 10

Slide 10 text

twitchの放送を見ると、 ユーザーの半分程度が LoLの配信を視聴している なお次に多いのはMinecraftとHearthstone(TCG)

Slide 11

Slide 11 text

LoLの配信でもよく使われ twitchの配信手順で 一番最初に薦められる配信ソフト フリーなのでXSplitより先に勧められてます!

Slide 12

Slide 12 text

Open Broadcaster Software (通称:OBS)

Slide 13

Slide 13 text

OBSとは C++で書かれていて でホストされている オープンソースな生放送配信ツール github H264 ACCの配信、録画 Intel のQuick Sync Videoに対応しており高速 シーンや映像ソースの切替やレイアウトが自由 デフォルトで、Twitch, Youtubeなどの有名サービスに連携配信(連携はない けどニコ生でも利用は可) 様々なエンジンで動くゲームのウインドウのキャプチャに対応 プラグイン機能

Slide 14

Slide 14 text

そう、プラグイン機能

Slide 15

Slide 15 text

ニコニコ生放送連携する プラグインがかけないかチャレンジ!

Slide 16

Slide 16 text

OBSApiでできること ホットキーの追加 映像ソースの追加 音声ソースの追加 シーンの設定の追加 設定パネルの追加 レンダリング周りの拡張 マイクの挙動の拡張

Slide 17

Slide 17 text

残念! OBSApiは映像ソースの追加がメインで 配信先の設定拡張は元にプルリク送るしかなさそう

Slide 18

Slide 18 text

とは言え、何かつくろうかなと Visual Studio 2013 Expressの VC++でMFCが使えない中 頑張ってみる

Slide 19

Slide 19 text

だがここ最近、ScalaとRubyという記述量が少ない 言語しか触ってなくて読む量が多くなるC++がキツ かった... / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / l o g w i n d o w x = ( f u l l s c r e e n X / 2 ) - ( 6 0 0 / 2 ) ; y = ( f u l l s c r e e n Y / 2 ) - ( 5 0 0 / 2 ) ; i n t l o g P o s X = G l o b a l C o n f i g - > G e t I n t ( T E X T ( " G e n e r a l " ) , T E X T ( " L o g P o s X " ) , - 9 9 9 9 ) ; i n t l o g P o s Y = G l o b a l C o n f i g - > G e t I n t ( T E X T ( " G e n e r a l " ) , T E X T ( " L o g P o s Y " ) , - 9 9 9 9 ) ; i n t l o g S i z e X = G l o b a l C o n f i g - > G e t I n t ( T E X T ( " G e n e r a l " ) , T E X T ( " L o g S i z e X " ) , 6 0 0 ) ; i n t l o g S i z e Y = G l o b a l C o n f i g - > G e t I n t ( T E X T ( " G e n e r a l " ) , T E X T ( " L o g S i z e Y " ) , 5 0 0 ) ; b I n s i d e M o n i t o r s = f a l s e ; f o r ( U I N T i = 0 ; i < m o n i t o r s . n u m ( ) ; i + + ) = " " { = " " i f ( = " " l o g p o s x = " " > = m o n i t o r s [ i ] . r e c t . l e f t & & l o g P o s X < m o n i t o r s [ i ] . r e c l o g P o s Y > = m o n i t o r s [ i ] . r e c t . t o p & & l o g P o s Y < m o n i t o r s [ i ] . r e c t . b o t t o m ) { b I n s i d e M o n i t o r s = t r u e ; b r e a k ; } } < / m o n i t o r s . n u m ( ) ; >

Slide 20

Slide 20 text

そこに光明、 OBSのプラグインがC#で書けるプラグイン を発見 CLRHostPlugin ただオリジナルは動かず、別のフォークして更新し てる人の を利用 バイナリ

Slide 21

Slide 21 text

ログが出力されて設定画面だけが表示されるプラ グインを作った c l a s s M y S e t t t i n g P a n e l : A b s t r a c t W P F S e t t i n g s P a n e { p u b l i c o v e r r i d e s t r i n g C a t e g o r y { g e t { r e t u r n " ニコニコ生放送" ; } } p u b l i c o v e r r i d e b o o l H a s D e f a u l t s ( ) { r e t u r n f a l s e ; } p u b l i c o v e r r i d e v o i d S e t D e f a u l t s ( ) { t h r o w n e w N o t I m p l e m e n t e d E x c e p t i o n ( ) ; } }

Slide 22

Slide 22 text

満足したw その他にとりあえずつかえるかもしれないなぁと思った公開API FPSの表示 配信開始と終了のフック

Slide 23

Slide 23 text

とはいえOBS本体ビルドしたい... Visual Studio 2013 Professionalが必要そう (6万円なり...) 解決する良いアイディア募集中です

Slide 24

Slide 24 text

まとめ 世界のtwitchとe-sportsの盛り上がりすごい そこでよく利用されているOBSのプラグイン作った VC++でMFCなしでUI作るの自分には苦行すぎた C#とWPFの開発すごい楽 (経験的にJavaのGUI開発の倍ぐらい楽)

Slide 25

Slide 25 text

以上 ご静聴ありがとうございました