Genvid 設定ファイル

Genvid 設定は、特定のスキーマに準拠した複数のファイルに含めることができます。ファイルは、JSON または HCL 形式で記述できます。

たとえば、DirectX サンプルには 3 つの設定ファイルが含まれています。

sample.hcl

version = "1.7.0"

settings {
  encode {
    input {
      width  = 1280
      height = 720
    }
    output {
      width  = 1280
      height = 720
    }
  }
  info {
    description = "Sample to demonstrate genvid"
    game        = "Cube"
    name        = "directx sample"
  }
}

このファイルには、サンプルに関する基本情報が含まれています。

  • ストリームのエンコード。
  • ストリームの基本情報。

events.json

{
  "version": "1.7.0",
  "event": {
    "game": {
      "maps": [
        {
          "id": "changeColor",
          "source": "userinput",
          "where": {"key": ["changeColor", "<name>"], "name": "<color>", "type": "string"},
          "key": ["changeColor", "<name>", "<color>"], "value": 1
        },
        {
          "id": "reset",
          "source": "userinput",
          "where": {"key": ["reset"], "name": "<name>", "type": "string"},
          "key": ["reset", "<name>"], "value": 1
        },
        {
          "id": "cheer",
          "source": "userinput",
          "where": {"key": ["cheer"], "name": "<name>", "type": "string"},
          "key": ["cheer", "<name>"], "value": 1
        }
      ],
      "reductions": [
        {
          "id": "changeColor",
          "where": {"key": ["changeColor", "<name>", "<color>"]},
          "key": ["<name>", "<color>"],
          "value": ["$count"],
          "period": 250
        },
        {
          "id": "reset",
          "where": {"key": ["reset", "<name>"]},
          "key": ["<name>"],
          "value": ["$count"],
          "period": 250
        },
        {
          "id": "cheer",
          "where": {"key": ["cheer", "<name>"]},
          "key": ["<name>"],
          "value": ["$sum"],
          "period": 250
        }
      ]
    }
  }
}

サンプル events.json ファイルには、イベントの詳細が含まれています。一意の識別子でイベントをグループ化することで、グループ化の有効、無効を切り替えることができます。サンプルでは、識別子は game です。

形式についての詳細は、 スケーラビリティの高いイベントチャンネル を参照してください。

game.hcl

version = "1.7.0"

job "directx" {
}

log "directx" {
  job      = "directx"
  fileName = "stderr"
  logLevel = true
}

config {
  local {
      directx {
        appdir = "{{env `PROJECTDIR` | js}}\\app"
    }
  }
}

このサンプル game.hcl ファイルには、3 つのカテゴリのゲーム設定情報が含まれています。

1 つ目の要素は、新規ジョブです。ジョブ名はテンプレートファイル名、およびテンプレートファイル内のジョブ名に対応しています。ジョブ設定には、2 つの属性が存在します。

  • dependencies: ジョブ開始前に待機するサービスのリスト。デフォルトは none です。
  • autostart: 引数なしの開始コマンドで、ジョブが自動的に開始するかどうか。

2 つ目は、 log 要素です。 genvid-sdk log game を実行した時に、 POST /log/logs に渡すオプションを提供します。

「logLevel」 を 「true」 に設定した場合、logLevel のコントロールをジョブのログページで確認できます。Log Level および Default Log Level のドロップダウンが表示されます。「logLevel」 を 「false」 に設定した場合、ドロップダウンは表示されません。

最後は config 要素です。コンテンツが key-value ストアに追加され、各オブジェクトがフォルダを記述し、それぞれの値が文字列に変換されて、キーとして挿入されます。

consul-template’s plugin は、引数 node で DOS コマンド where を呼び出し、コマンドアウトプットを返します。プロジェクトを読み込んだ時に、パス上の実行ファイルを使用する事ができます。 js メソッドが、Windows のパス区切りなどの要素がファイル内で適切に使用されていることを確認します。

Web サンプルには、events.json と同様に2つの設定ファイルが含まれます。

stream.hcl

version = "1.7.0"

secrets {
  disco {
    GENVID_DISCO_SECRET = "discosecret"
  }
  studio {
    GENVID_STUDIO_SECRET = "studiosecret"
  }
  webgateway {
    GENVID_WEBGATEWAY_SECRET = "webgatewaysecret"
  }
}

settings {
  encode {
    input {
      width  = 1280
      height = 720
    }
    output {
      width  = 1280
      height = 720
      framerate = 30
    }
  }
  info {
    description = "Sample to demonstrate genvid"
    game        = "Cube"
    name        = "Cube Sample"
  }
}
config {
  local {
    appdir = "{{env `PROJECTDIR` | js}}\\app"
  }
}

このファイルには、シークレット (シークレットの値は変更する必要があります) が含まれています。

web.hcl

version = "1.7.0"

job "web" {}

log "web" {
  job      = "web"
  task     = "web"
  fileName = "stdout"
}

log "weberr" {
  job      = "web"
  task     = "web"
  fileName = "stderr"
}

link "web" {
  name     = "Cube Sample"
  template = "http://${serviceEx `web` `` true}/"
}
link "admin" {
  name     = "Cube Admin"
  template = "http://${serviceEx `web` `` true}/admin"
}

// {{with $url := env `SSLWEBENDPOINT`}}
link "web" {
  name     = "Cube Sample"
  template = "https://{{$url}}:30000"
}
link "admin" {
  template = "https://{{$url}}:30000/admin"
}
// {{end}}

// Check if we are using a load balancer
// {{with $url := env `WEBENDPOINT`}}
link "web" {
  name     = "Cube Sample"
  template = "https://{{$url}}/"
}
link "admin" {
  name     = "Cube Admin"
  template = "https://{{$url}}/admin"
}
// {{end}}



config {
  local {
    website {
      root   = "{{env `PROJECTDIR` | js}}"
      script = "{{env `PROJECTDIR` | js}}\\backend\\www"
    }
    binary {
      node {
        path = "{{plugin `where.exe` `node` | js}}"
      }
    }
  }
  embed_ssl {
    enabled = false
  }
} // end of config

web.hcl セクションは、 game.hcl セクションと似ていますが、Web サーバー用です。デフォルト属性だけの job が 1 つと 2 つの log 要素 (一般的なアウトプットと一般的なエラー) が含まれます。

システム内で URI として使用する複数のリンクが含まれます。 genvid-sdk open を実行することで、使用可能なリンクを確認できます。

このリンクは、テンプレートシステムを使用して、最終リンクを生成します。Web サンプル では、テンプレート http://${service \`web\`}/ を Web サイト URI に変換します。

利用可能なテンプレート関数は次の通りです。

  • service service: サービスのアドレスとポート。
  • serviceEx service tag external: サービスのアドレスとポート。tag はサービスの検索に使用する任意の値です。external 属性は、外部アドレスを要求します。
  • key key: Consul key-value ペアの値。
  • keyOrDefault key default_value: Consul key-value ペアの値。このキーが取得できない場合は、デフォルト値を取得します。

DirectX と Web Web サンプルにはどちらも、テンプレートとしてクラウド環境用の設定が含まれます。