Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OBSのプラグイン作ってみた

 OBSのプラグイン作ってみた

社内LTでOpen Broadcast Softwareのプラグインを作成してみたことを発表しました。

Soichiro Yoshimura

August 15, 2014
Tweet

More Decks by Soichiro Yoshimura

Other Decks in Technology

Transcript

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

    View Slide

  2. twitch
    って知ってますか?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. League of Legends (通称:LoL)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. Open Broadcaster Software
    (通称:OBS)

    View Slide

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

    View Slide

  14. そう、プラグイン機能

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. だがここ最近、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
    (
    )
    ;
    >

    View Slide

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

    View Slide

  21. ログが出力されて設定画面だけが表示されるプラ
    グインを作った
    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
    (
    )
    ;
    }
    }

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide