Genvid SDK 1.22.0

Genvid SDK 1.22.0 へようこそ。このリリースで、安定した状態で統合を行うことができ、ローカルでの開発や、限定したクラウドでのデプロイに使用することができます。プロダクションを完全にデプロイするための一部の機能はまだ実装されていませんが、他のソフトウェアによって提供可能です。プロダクションのデプロイを予定している場合は、support@genvidtech.com にお問い合わせください。

私たちは、快適な製品展開のためにすべての機能を完成させるまで、定期的にリリースを行うことをお約束します。私たちは常に、リリース間のスムーズなアップグレードを保証し、可能な限りの後方互換性サポートを提供するよう努力しています。既知の問題と回避策の完全なリストは、弊社の Forum に掲載されています。何か問題がありましたら、ご連絡ください。

現在ご利用になれる機能

現在の機能の概要を紹介します。本リリースの新機能一覧は以下の 主な修正と変更 を参照してください。

  • Windows C++ API、C# ラッパー。
  • D3D11 または未処理フレームのビデオキャプチャ。
  • WASAPI オーディオキャプチャ。
  • ビデオエンコード (H264 + AAC)。
  • YouTube へのライブ動画配信。
  • 複数のインスタンスからの、複数の動画およびデータのストリーミング。
  • 任意の追加ゲームイベントおよび通知のライブ配信。
  • スケーラブル イベント メッセージ システム。
  • 埋め込み型 Web ページ用 Javascript SDK。
  • ビデオとゲームデータストリームの自動同期。
  • オーディオ/ビデオおよびデータの複数のソース (ベータ版)。
  • ライブ動画編集と基本コンポジション効果 (ベータ版)。
  • RTMP Ingest サーバー (ベータ版)。
  • Unity3D 統合 (ゲームと管理)。
  • Unreal Engine 統合 (ゲームと管理)。
  • サービス制御用 REST API (ベータ版)。
  • ローカル、リモートクラスタの管理用ツール、スクリプト。AWS 用サンプルスクリプト。
  • メトリクス フィード (ベータ版)。
  • 負荷テスト用ライブラリ。
  • 詳細な解説書。
  • 複数の統合サンプル。

主な修正と変更

Azure の初期サポート

このリリースには、Azure 上にクラウドのインフラストラクチャを作成して Genvid クラスタを実行できる新しい Terraform モジュールが含まれています。また、Azure 環境と操作を行うツールボックスのサポートも追加しました。

現時点では、Azure の基本的なクラスタモジュールのみをサポートしています。今後のリリースでロードバランサーと Twitch サンプルのサポートを追加する予定です。

環境変数によるクラスタ ID 設定

クラスタ ID は通常、コマンドライン引数として与えられるか、ツールボックスのデフォルト値である local となります。環境変数 GENVID_CLUSTER_ID で値を設定することができるようになりました。プロファイルを使用して環境変数を設定することもできます。

注意: コマンドによっては、コマンドラインでクラスタ ID を指定する必要があります。そのような場合、クラスタ ID が指定されていないと、デフォルトで local となります。

Hashicorp Suite バージョンのアップグレード

同梱の Hashicorp Suite のプログラムを以下のバージョンにアップグレードしました。

  • Nomad 0.10.0
  • Vault 1.2.3
  • Consul 1.6.1
  • Terraform 0.12.19

注意: Genvid SDK バージョンの Terraform を 0.11 から 0.12 にアップグレードしたため、プラットフォームで使用するカスタム Terraform モジュールもアップグレードする必要があります。詳細については、アップグレードノートを参照してください。

Terraform のアップグレードにより、Bastion-UI/Terraform/Cluster/Settings ページの読み込み方法も変更する必要がありました。ページの読み込みに時間がかかるようになったので、読み込み時間を示すスピナーを追加しました。

NATS がシステムジョブになりました。

クラスタの構築時に NATS は services ジョブによって起動されるのではなく、すべてのノードで実行されるようになりました。これにより、クライアント数が多い場合でも負荷のバランスを良くすることが可能になります。

注意: クラスタ UI がジョブのリストに NATS を表示しなくなり、Hashi UI からしかアクセスできなくなります。

その他変更点や修正点

  • [bastion-ui] Terraform 設定でブラウザの戻るボタンをクリックしてもエラーが表示されなくなりました。
  • [bastion-ui] ウィンドウのリサイズ時の UI を修正。
  • [cluster-ui] クラスタが使用している Cluster-UI で、すべての S3 イメージのリストを表示できるようになりました。
  • [cluster-ui] ストリームの開始を待っている間に、ロード中であることを示すスピナーを追加。
  • [cluster-ui] Microsoft Edge の UI を修正。
  • [cluster-ui] クラスタ構築フォームに 『Advanced Editor』 切り替えボタンを追加。JSON フォーマットで確認、編集ができるようになりました。
  • [コマンド] エラーの説明で空の文字列が返される問題を修正。
  • [composed] 一部の状況において、ストリームが別の ID で置き換えられることがある問題を修正。
  • [全般] サードパーティのライブラリを新しいバージョンに更新。
  • [全般] 適切な文字列比較処理を行えるように Python スクリプトをアップデート (デフォルトでは、Python 3.8 が 「is」 を受け付けなくなりました。」==」 の使用を推奨)。
  • [genvid-ami] AMI が存在しない場合、新たに AMI を設定するためのクラスタが作成されない genvid-ami setup の不具合を修正。
  • [gvencode] gvencode encoding muxer の non-monotone increase dts の警告を修正。
  • [gvencode] composed が gvencode との接続を失って戻ってきたとき、遅延の問題を修正。
  • [leaf] メトリクス genvid.leafd.map.processkeyvalues が収集されない不具合を修正。
  • [nats] NATS サーバーをバージョン 2.0.4 にアップグレード。
  • [nats] Genvid SDK が NATS のエラーに対応できるようになりました。
  • [sdk] ライブ配信の内容に応じて、コンポジションデータストリームの帯域幅のブループリントを約 5 分の 1 に削減。
  • [sdk] 今後使用するために、通信プロトコルのさまざまな要素をアップデート。
  • [sdk] ストリームのフォーマットが SDK から Web クライアントに伝搬されるようになりました。
  • [sdk] ソケットの状態によっては、TCP と UDP ソケットが正しく閉じられない問題を修正。
  • [sdk] 同じストリーム ID でアノテーションを送信したときに、gamedata が送信されない問題を修正。
  • [sdk] Genvid_Terminate() 関数を呼び出すときに時間がかかりすぎる問題を修正。
  • [sdk] (グローバルではなく) ストリームごとの送信中のアノテーションの最大数を修正。
  • [sdk] RTMSP 接続が失われて復旧した場合に、ゲームが大量のオーディオ/ビデオ/データストリームを送信してしまう問題を修正。
  • [sdk] フレームの表示を垂直ブランクで同期することを指定する swapchain sync-interval を修正。
  • [sdk] composed と SDK との接続が失われた場合に、送信されたオーディオ/ビデオ/データストリームが蓄積される問題を修正。
  • [statsd] SDK サービスはデフォルトでは、最初に見つかったものではなく、ローカルの statsd サービスに接続するようになりました。
  • [statsd] statsd が接続されていないときのログの問題を修正。
  • [studio] トランジションがビジーの際に破棄されず、待機するようになりました。
  • [studio] 編集ダッシュボード切り替え時のオーディオミキサーからのエラーメッセージを修正。
  • [studio] Studio で 1 つのソースが停止している場合やクラッシュしている場合に、オーディオ/ビデオが同期しないことがある問題を修正。
  • [studio] ダッシュボードを重複して作成しようとすると、ユーザー側に警告が表示される問題を修正。
  • [studio] ストリームがまだ開始されていない場合や、ストリームが実行されておらず一時停止していない場合に表示するスピナーを追加。
  • [studio] Studio のレイアウト作成ダイアログに文字列検証機能を追加。
  • [studio] バックエンド・サービスとの接続が切れたことを知らせるエラーメッセージを追加。
  • [studio] gvencode が Studio から切断された場合の再接続アルゴリズムを追加。
  • [studio] Web コンポーネントに関するメトリクスフィードバックを追加。
  • [studio] スライダからの負の値の入力値は、Video Mixer ではサポートされなくなりました。
  • [studio] 元に戻す機能が正しく反映されない問題を修正。
  • [studio] シーン選択で値が正しく更新されない問題を修正。
  • [studio] フロントエンドのソースバッファクォータの問題を修正。
  • [studio] シーンが存在しない場合、デフォルトシーンが作成されます。デフォルトシーンは他のシーンと全く同じように動作します。
  • [studio] シーンが必ず 1 つ以上存在するように、リスト上のシーンが残り 1 つになると、 delete アイコンが無効化されるようになりました。
  • [studio] シーンを保存する際に、保存するセクションが選択されていない場合でも、すべてを保存してしまう問題を修正。
  • [studio] スライダー入力で、最小/最大制限値よりも低い値や高い値を受け付けなくなりました。
  • [studio] auto-cut が有効な状態で delete/edit アイコンをクリックすると、シーンを自動でライブ配信する問題を修正。
  • [studio] オーディオフォローボタンが仕様通りに動作するようになりました。
  • [studio] 様々な安定性の問題を修正し、応答性を向上させました。
  • [terraform] Terraform コマンドページの INIT ボタンで、モジュールの再インポートを行うことなくクラスタの初期化ができるようになりました。
  • [terraform] Terraform 設定のブール値のサポートを修正。
  • [terraform] クラスタのクローン作成時に空のコマンドログを取得する問題を修正。
  • [terraform] 説明文が長すぎるとツールチップが切れて表示される問題を修正。
  • [terraform] terraform destroy が基本クラスタの破棄に失敗する不具合を修正。
  • [terraform] 変数が正しく読み込まれない問題を修正。
  • [tick] telegraf を 1.3.5 から 1.13.1 にアップグレードし、telegraf の読み込み負荷を軽減してパフォーマンスの問題を解決しました。
  • [tick] ゲームインスタンス上で実行している telegraf タスクを追加。
  • [ツールボックス] 重大度別にヘルスチェックを並べ替えました。
  • [ツールボックス] genvid-clusters コマンドにフィルタ処理を追加。
  • [ツールボックス] 指定インスタンスの Terraform 作業ディレクトリを再生成できる BastionAPI.terraform_regenerate_instance を追加。
  • [toolbox] ユニークなパスを作成するためにバックエンド構成で使用される新しいクラスタごとに UUID を生成するようになりました。これにより、S3 のようなバックエンドを使用して以前のクラスタと同じ名前の新しいクラスタを作成するときに、名前の競合を回避できます。
  • [ツールボックス] genvid-sdk upload-images の動作に、クラスタの実行が不要になりました。
  • [ツールボックス] sdk.pyupload_images* メソッドの安定性を高めるため、デフォルトではすべての場合に構成をアップデートしないように変更。
  • [ツールボックス] sdk.pyupdate_images_config メソッドを追加し、クラスタのイメージ構成を更新できるようになりました。
  • [toolbox] Introduced a new GENVID_VERBOSE_EXCEPTIONS` environment variable which makes the toolbox print the full stack-trace when an exception is raised.
  • [ツールボックス] ZIP ファイルやフォルダに、 genvid-sdk package コマンドを追加。
  • [ツールボックス] Docker イメージをパッケージする genvid-sdk docker-package コマンドを追加。
  • [ツールボックス] genvid-bastion install コマンドの安定性を改善し、フェールオーバーの競合状態を回避できるようになりました。
  • [ツールボックス] クローンクラスタに初めて読み込む際の Terraform init を修正。
  • [ツールボックス] genvid-sdk load-config が、引数に Nomad テンプレートへのパスを受け付けるようになりました (これまでは静的な設定しかサポートしていませんでした)。
  • [ツールボックス] consul-template の薄いラッパーである新しい genvid.toolbox.ConsulTemplate クラスを追加しました。このクラスは、より安定性を高めるために ConsulTemplateTool mixin を再実装するために使用します。
  • [ツールボックス] Endpoint /content は、Bastion API で非推奨となりました。
  • [ツールボックス] エラーメッセージの説明を追加。
  • [ツールボックス] genvid-sdk load-config の機能を拡張し、コマンドを使ってチュートリアルを読み込むようにしました。
  • [ツールボックス] Nomad テンプレートジョブをロードするディレクトリのパスを指定するために、 genvid-sdk load-config コマンドにオプションの引数 --job-template-dir を追加。
  • [ツールボックス] ロードする前に設定ファイルで consul-template を実行するように、 genvid-sdk load-config に引数 --with-consul-template を追加。
  • [ツールボックス] genvid-sdk clean-config で、一部の設定を削除するコマンドを使用できない不具合を修正。
  • [ツールボックス] 有効な GENVID_BASTION_URL に不要なスラッシュを使用した場合に、 genvid-sdk がエラーを吐かずに失敗する問題を修正。
  • [ツールボックス] ほとんどの依存性アイテムを最新の安定バージョンに更新。
  • [ツールボックス] consulateconsul-python に変更。
  • [ツールボックス] genvid-sdk upload-images および upload-images-sdk にクラウドプロバイダオプションを追加。
  • [ツールボックス] Python ツールボックスの pyyamlcolorama のバージョンを更新。
  • [ui] ファイル名を含め、選択されたログエントリの適切なログが、ログパネルに表示されるようになりました。
  • [ue4] 設定を複数回連続して保存しても、複数の成功メッセージが表示されなくなりました。
  • [ue4] UE 4.22 以降で Consul との通信に使用していた HTTP URL アドレスを修正。
  • [ue4] UE4 4.23、4.24 への互換を追加。
  • [unity] Genvid Unity プラグインの SubmitGameData メソッドを非推奨とし、より明示的な SubmitGameDataJSON を追加。
  • [vault] 複数の Vault インスタンスがある場合の Vault 初期化を修正。
  • [web sdk] Web SDK の同期アルゴリズムを改善。
  • [web sdk] Web SDK が、初期化時にバージョンをログに記録するようになりました。
  • [web sdk] 接続時に、Web SDK と leaf の相互の互換性を確認するようにしました。
  • [web sdk] 非 UTF8 の gamedata を使用している場合に発生する Web SDK の警告を削除。
  • [web sdk] アノテーションにより、フレームがクリアされてしまう問題を修正。

既知の問題

プロキシを使用している場合に Compose ウィンドウが使用できない。

Bastion の将来のバージョンには、異なるマシンからのアクセスを許可するリモートサーバーが追加されます。現行バージョンではこの機能を限定的にサポートしており、Bastion ホストがクラスタファイアウォールに守られている場合に (Amazon EC2 マシンなど)、問題が発生することがあります。

回避方法としては、マシンのローカル IP がクライアントマシンからアクセスできるように、Bastion マシンへの VPN 接続を行うことです。

Windows がスリープ状態から復帰後、アプリケーションが正常に動作しない。

Nomad は、それ自体も含み、スリープ中のジョブで問題が発生する場合があります。Nomad 側で修正される可能性は低いものの、プロダクション環境では発生しません。最善の回避方法としては、サービス実行中は Windows がスリープ状態にならないようにするか、 genvid-bastion reinstall でサービスを開始しなおすことです (genvid-bastion restart だけでは不十分です)。

gvencode で再スタートした後、YouTube のストリームが正しくリセットされない。

サービスが停止して、その直後に再スタートした場合、YouTube のライブ配信サービスは、同一ライブ配信セッションであると判断します。ほとんどの場合は、これで問題ありませんが、サービスと実際の視聴との間に長い遅延が発生するために、直前のセッションが表示されてしまう可能性があります。今後のバージョンでは、新しいストリームを適切にリクエストする方法を実装する予定です。今後のバージョンでは、新しいストリームを適切にリクエストする方法を実装する予定ですが、それまでは、YouTube ダッシュボードからストリームキーをリセットするか、サービスを再スタートする前に、しばらく (5 分程度) 時間を空けるようにしてください。

オーディオがマイクの音声やループを無限にキャプチャする。

WASAPI のオーディオ自動キャプチャモードを使用した時に、マシンのデフォルトのオーディオ-デバイスを通過するサウンドがすべてキャプチャされてしまいます。これには、システムアラートやマイク入力だけでなく、Web ブラウザも含まれます。ゲームを実行しているのと同じローカルマシンを使用してゲームストリームをテスト視聴すると、ゲームは自分自身のオーディオストリームを~10秒の遅延でキャプチャします。これが次第に音質が劣化する (ストリーミングされる度に圧縮されるため) エコーを生み出します。

オーディオを無効にするには、次の 2 つの方法があります。

  • 設定で settings.encode.input.silenttrue にする。 (デフォルト設定をする。)
  • raw オーディオキャプチャを使用する (Unity のデフォルト設定)。

Firefox でのスタンドアロンプレイヤーが動作しない。

読み込み可能なストリームを Firefox で有効にする必要があります。about:config URL で、 dom.streams.enabledjavascript.options.streams のプリファレンスを有効にする必要があります。

オートカットのチェックボックス設定はローカルにのみ保存されます。

Studio では、Scene Widget 内の自動カットチェックボックスの設定はローカルストレージにのみ保存されます。ブラウザのキャッシュがクリアされるとユーザーからの入力もクリアされます。また、Studio セッション終了時に自動カットが「オン」になっている場合は、Studio セッションを再び開始すると、デフォルトで「オフ」に戻ります。

Studio は、複数のウィンドウから同じコントロールの入力を受け取ることはできません。

Studio が、複数のブラウザウィンドウで開かれていて、異なるソースから 1 つのコントロールに入力を受信した場合、最後の値は最新のものに更新されるのではなく、異なる入力間でバウンスされます。たとえば、Audio Mixer Widget でユーザーが Master Gain のスライダを 20 db に変更し、別のユーザーが 0 db に変更した場合、スライダハンドルは 0 db に設定される代わりに 20 db と 0 db の間でバウンスします。この問題が解決されるまで、異なる ウィンドウから 1 つのコントロールへ入力することはお勧めできません。

Genmad SDK では、Nomad で実行されていないアプリケーションは 1 つのみサポートされます。

Genvid SDK を使用したアプリケーションを Nomad を使用せずに起動した場合、デフォルトのセッション名が割り振られます。Unity エンジンや Unreal エンジンでアプリケーションをテストするときやアプリケーションを手動で起動するときに便利です。現在、環境変数 GENVID_SESSION_NAME をユニーク名に変更していない場合、Genvid SDK は、この方法で起動した複数のアプリケーションをサポートできません。修正プログラムが Genvid SDK に統合されるまでは、Nomad を使用してアプリケーションを起動することで、この問題を回避することをお勧めします。

Twitch および YouTube の同期について

テストにおいて、Twitch と YouTube でのライブ配信時に同期の問題が発生することを確認しています。詳細と回避策については Twitch および YouTube を参照してください。

ログ定義の制約

値が stdout および stderr と異なる場合、ファイル名はスタック上でユニークである必要があります (2つのジョブが同じログファイル名を持つことはできません。例: default.out)。

負荷テスターサンプルが動作しない

現行バージョンの負荷テスタサンプルは、スクリプトにエラーがあり、適切に実行できないため、使用できません。

Azure のレポートでは、要求されたインスタンスサイズが利用できない

Azure では、ゲームマシン用の計算インスタンスタイプ Standard_NV6 を使用しています。一部のアカウントでは、このインスタンスタイプのプロモバージョンしか利用できません (Standard_NV6_Promo)。

Azure モジュールで Terraform のセットアップを行うと、The requested size for resource 『XXXX-game-1』 is currently not available in location 『XXXX』 というエラーが発生することがあります。

回避策としては、Terraform の設定ページで instance_game_typeStandard_NV6_Promo に変更し、コマンドページで Plan apply -> Apply を行ってみてください。