Genvid SDK 1.25.0

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

プロダクションの快適なデプロイを行うための機能がすべて備わるまで、定期的にリリースの更新を行う予定です。リリース間のアップグレードをスムーズに行うことができ、可能な限り後方互換サポートを行えるよう、常に努力しています。既知の問題や回避策については、 フォーラム でご参照ください。不明な点などございましたら、弊社までお問い合わせください。

現在の機能

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

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

主な修正と変更

Azure Multi-AZ ロードバランス

複数のアベイラビリティゾーン (AZ) にデプロイする機能を追加しました。これにより、設定タブに azs という新しい変数が導入され、AWS のサポートに対応できるようになりました。詳細は Azure Cloud 解説書の タグ セクションを参照してください。

Azure SSL 有効クラスタ

モジュール azurerm_basic_cluster_alb_ssl により、SSL 対応クラスタのデプロイが可能なりました。このモジュールでは、証明書、DNS を管理し、クラスタで Application Gateway を使用することができます。これは、SSL クラスタの使用を必要とする Twitch 拡張機能やその他のプラットフォームを構築する際に重要です。

Cube サンプルデータストリームのリファクタリング

データストリームの使用法のベストプラクティスに従って、Cube サンプルをリファクタリングしました。

データ送信が複数のストリームに分割されるようになりました。

  • 名前
  • 位置
  • カメラ

さらに、以下の改善を実装しました。

  • Popularity が毎秒通知として送られてくるようになりました。
  • RESETSPEEDDIRECTION イベントは、変更への応答として通知を発動します。
  • COLORS イベントは、変更への応答としてアノテーションを発動します。
  • Twitch 拡張機能が、色の変化を受信したときに視覚的な通知を表示するようになりました。
  • Web サンプルが、色の変化のカウントダウンポップアップを表示するようになりました。
  • Web サンプルが、イベントへの応答に緑色のポップアップを表示するようになりました。

サービスとしての Studio

Studio サンプルを標準サービスに変換したため、スタンドアロンの Studio サンプルはなくなりました。詳細は アップグレードノート を参照してください。

その他変更点や修正点

  • [解説書] リリースノートのページに数字を付けて解説書のクイック検索結果を改善。
  • [解説書] Genvid_Initialize および Genvid_Terminate の解説を改善。
  • [解説書] 欠落していた genvid.webgateway メトリクスの定義を追加。
  • [解説書] genvid.gvencode-compose プレフィックスの下にある rtmspMessageQueueCountoutputbufferlimit_uswriteframe メトリクスのタイプが間違っている問題を修正。
  • [解説書] GCL 欠落フレームのメトリクスを追加。
  • [解説書] DLL 呼び出しのメトリクスを更新。
  • [sdk] メトリクスの解説書に framemissed key to the メトリクス キーのメトリクスを追加。
  • [sdk] tick および composed に GCL メトリクスを追加。
  • [sdk] audio/video 情報のメトリクスを追加。リモート GUI でも利用できます。
  • [sdk] Genvid DLL コールに経過時間のメトリクスを追加。
  • [sdk] ログをリアルタイムではなく、30 秒ごとに重複およびドロップしたフレーム数を報告するだけに改善。
  • [sdk] framesubmittedframesizesubmittedframesubmitteddroppedframesizesubmittedropped メトリクスが送信されない問題を修正。
  • [sdk] audio-submit delta-metrics が送信されない問題を修正。
  • [sdk] WASAPI オーディオキャプチャ使用時にクラッシュが発生する問題を修正。
  • [sdk] オーディオ、ビデオのラグ発生時に、オーディオストリームが途切れる問題を修正。
  • [sdk] アノテーションが 1 回目以降送信されなくなる問題を修正。
  • [sdk] オーディオフレームレートが設定値でなく、デフォルト値を使用する不具合を修正。
  • [sdk] 送信リストに既に登録されているフレームをシステムが過剰に補正してしまう問題を修正。
  • [sdk] 欠落した送信が補填されない問題を修正。
  • [sdk] リモート GUI の FPS が誤って計算されていた問題を修正。
  • [sdk] Game と GVEncode 間のオーディオ/ビデオフレーム統計を表示するログを追加。
  • [sdk] HTTP レスポンスの出力バッファサイズが大きすぎると表示される不具合を修正。
  • [sdk] ゲームデータが同期しない不具合を修正。
  • [sdk} フレームレートが 1 FPS 以下のゲームをストリーミングすると、ストリームがロックされる問題を修正。
  • [sdk] ライブラリで有効になっていない例外処理の欠落を修正。
  • [web-sdk] Web SDK に欠落していた TypeScript の説明ファイルを追加。
  • [studio] ユーザーが再生ボタンを押さなかった場合、Studio がブラウザをクラッシュさせる問題を修正。
  • [studio] UT4 サンプル使用時に Studio が起動しない問題を修正。
  • [studio] CUT 使用時にストリーミングが停止する問題を修正。
  • [studio] 一度有効にした Studio を無効にするとストリーミングに失敗する問題を修正。
  • [studio] 初回起動時にモニタータブで Studio スタジオが開かない問題を修正。
  • [studio] 選んだ設定が正しく記憶されない問題を修正。
  • [studio] オーディオ設定が適用されない問題を修正。
  • [composed] binsD に状態を格納してバックエンドと Studio UI のミスマッチを防ぐことで、composeD のバックエンドのコンポジション状態を改善。
  • [composed] 例外の発生後、composeD が再接続できない問題を修正。
  • [composed] データストリームの帯域幅が異常に増加する問題を修正。
  • [composed] クラッシュ後に composeD が再接続しされない問題を修正。
  • [composed] composeD と GVEncode の接続が切れたときにメモリが増える問題を修正。
  • [composed] フロントエンドがゲームデータのメトリクスの送信に失敗する問題を修正。
  • [composed] compose-backend frame-discarded メトリクスを追加。
  • [composed] ストリームが認識されない問題を修正。
  • [composed] GVEncode との接続がオフラインの場合、composeD がゲームデータを送信しない問題を修正。
  • [gvencode] 初期化時に GVEncode がクラッシュする問題を修正。
  • [gvencode] Genvid 設定でオーディオストリームを無効にすると、オーディオ/ビデオ/データの非同期化が発生する問題を修正。
  • [gvencode] rtmspMessageQueueCount メトリクスにオーディオとビデオの個別のフィールドが含まれていなかった問題を修正。
  • [gvencode] 接続エラー時にリソースがフラッシュされないとサービスがクラッシュする問題を修正。
  • [gvencode] ローカルおよびクラウド テンプレートでは、すべてのフィルタ メトリクスをデフォルトで有効化。
  • [gvencode] gvencode でクラッシュする可能性のある合成コマンドのバグを修正。
  • [gvencode] ingest がストリームを受信しているときに gvencode がメモリ不足になることがある不具合を修正。
  • [rootd] Session: read error: read tcp : i/o timeout のログレベルをエラーから警告に変更。
  • [rootd] データフレームが無効なタイムスタンプで出力されていたバグを修正。
  • [leafd/rootd] ストリームにアノテーションが送信されていない場合、 rootD と leafD がクラッシュすることがある問題を修正。
  • [cube サンプル] キューブの色が変わったときに、キューブのヘイローの色が切り替わらない問題を修正。
  • [cube サンプル] UE4 Cube サンプルによって送信されるリセット通知が、管理者が行っていない場合でも、管理者によってトリガーされたと表示される問題を修正。
  • [cube サンプル] UE4 Cube サンプルでキューブをリセットすると、位置のみではなく、方向、向き、速度、色が変更されてしまう問題を修正。
  • [cube サンプル] Cube DirectX サンプルから未使用の設定ファイルを削除。
  • [cube サンプル] インスタンスの地域設定が US/English になっていない場合に、キューブの位置やカラーフォーマットが設定できない問題を修正。
  • [unity プラグイン] ストリーム FPS パラメータが無視される問題を修正。
  • [unity プラグイン] データが送信されない問題を修正。
  • [unity プラグイン] オーディオストリームのパラメータが、オーディオが送信されるたびに設定される問題を修正。
  • [unity プラグイン] Genvid Video Prefab を更新し、Unity UI の新しいフィールドでユーザーがビデオのフレームレートを設定できるようになりました。
  • [unity プラグイン] Audio/Video/Data Streams の destroy 関数が正しく呼び出されていなかったのを修正。
  • [ue4 プラグイン] プラグインを現在の Unreal LTS バージョン 4.25.4 と互換性のあるものに更新。
  • [ue4 プラグイン] -v (--version) および -e (--envpath) のフラグ付きでインストールした場合に、UE 4.22 バージョンのビルドへのサポートを追加。
  • [ue4 プラグイン] SubmitNotification を使用すると、 GenvidStreams がクラッシュする問題を修正。
  • [ue4 サンプル] Cluster UI でログにアクセスできない問題を修正。
  • [ue4 サンプル] UE4 のプラグインファイルを転送するマニフェストファイルをアプリケーションフォルダに移動。詳細は GenvidPlugin インストール解説書 を参照してください。
  • [ue4 サンプル] ue4.py prepare を呼び出すと、変更したファイルが削除されてしまう問題を修正。
  • [ue4 サンプル] ue4.py prepare コマンドに --quiet および --progress オプションを追加。
  • [ue4 サンプル] UE4 のキューブスクリプトが環境コマンドを無視する問題を修正。
  • [ue4 サンプル] UE4 のキューブスクリプトがデフォルトで空の環境変数を設定する問題を修正。
  • [ue4 サンプル] SubmitNotification を使用した Blueprint に通知データのリンクがない問題を修正。
  • [ut4 サンプル] SSL ストリーミングのサポートを追加。
  • [ut4 サンプル] BP_GenvidStreams を新しい SubmitNotification 関数の場所に合わせて更新。
  • [youtube] チャンネル名を使用している場合に、埋め込み YouTube プレイヤーが接続できない問題を修正。 接続にビデオ ID を使用するようになりました。
  • [ツールボックス] genvid-clusters コマンドの -c オプションが無視されてすべてのクラスタに適用される問題を修正。
  • [ツールボックス] requests ライブラリの固定バージョンの要件を削除。
  • [ツールボックス] デフォルトの Python バージョンを 3.5 から 3.8.6 にアップグレード。
  • [bastion-api] /isIPinCidr API エンドポイントを Bastion API に追加。
  • [bastion-ui] DELETE 確認ダイアログが消える問題を修正。
  • [bastion-ui] 現在の Bastion IP が信頼された CIDR の一部でないかどうかをユーザーに知らせるために、Terraform の設定ページに視覚的なフラグを追加。
  • [bastion-ui] メニューのドロップダウン項目に欠落していた Monitor アイコンを追加。
  • [bastion-ui] basic_cluster_alb_sslminimal_cluster_alb_sslazurerm_basic_cluster_alb_ssl に新しい設定 web_health_check_path を追加。
  • [bastion-ui] 複数のクラスタでモジュールのインポートを処理する際に、正しい状態を表示するように UI を改善。
  • [bastion-ui] 非常に長い値を持つ Terraform 設定の表示を改善。
  • [bastion-ui] 値が変更されていない場合に、Terraform の設定ページで Unsaved changes ダイアログが表示される問題を修正。
  • [cluster-ui] Edge や Chrome を使用しているときに、ボロードキャスト設定の項目が消えてしまう問題を修正。
  • [aws] AWS クラスタ basic_cluster_alb_ssl から変数 private_subnetspublic_subnets を削除。
  • [aws] 組織単位 (OU) の利用を可能にするデフォルトの AWS 認証プロバイダへのサポートを追加。
  • [aws] us-east-1 以外のリージョンの S3 バケット作成へのサポートを追加。
  • [aws] 新しいクラスタ用に暗号化されたローカルストレージのサポートを追加 (アップグレード時には無効にすることができます)。
  • [aws] サーバインスタンスを Debian バージョン 9 からバージョン 10 にアップグレード。
  • [aws] 一部の Terraform の変数と出力の名前を変更し、AWS クラスタからそれ以外のものを削除。詳細は アップグレードノート を参照してください。
  • [aws] クラスタ作成後に AWS でサブドメインを変更できるようにサポートを追加。 NS レコードは手作業で削除する必要があります。
  • [aws] ami_version 変数でサフィックスが指定されていない場合に、Terraform がバージョンサフィックスを持つ AMI をピックする問題を修正。
  • [aws] minimal_cluster_alb_ssl および basic_cluster_alb_ssl で変数 leaf_tg_stickiness_enabledleaf_stickiness_ttlweb_tg_stickiness_enabledweb_stickiness_ttl が使用されている場合、ユーザーが別の Leaf 接続に切り替えられない問題を修正。
  • [aws] 他の minimal_* クラスタモジュールと統一するために minimal_cluster_alb_ssl に追加された変数 server_instance_profile_namegame_instance_profile_name 、 key_pair_privatekey_pair_public
  • [azure, aws] Windows Defender SmartScreen を無効にして、wingame イメージを作成する際に必要のないプロセスの CPU 使用量を削減。
  • [consul] Consul をバージョン 1.8.6 にアップグレード。
  • [consul] Azure クラスタへのオートジョインのサポートを追加。
  • [nomad] Nomad Server と Client をバージョン 0.12.1 にアップグレード。
  • [tick] Genvid Connect Library (GCL) を監視するためのダッシュボードを追加。

既知の問題

クラスタを 1.24.0 から 1.25.0 にアップグレードする際に AWS からエラーが報告されます。

AWS クラスタを Genvid SDK バージョン 1.24.0 から 1.25.0 にアップグレードする場合、コマンドページで Plan apply -> Apply を選択すると、同じエラーが 2 回表示されることがあります。:

Error creating IAM instance profile [cluster-name]-xxxx-xxxx: EntityAlreadyExists:
Instance Profile [cluster-name]-xxxx-xxxx already exists.

これは Terraform の bug が原因です。回避策として、もう一度 Plan apply -> Apply を実行してください。

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

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

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

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

スタンドアロンプレイヤーを適切に動作させるためには、読み込み可能なストリームを Firefox で有効にする必要があります。about:config URL で、dom.streams.enabledjavascript.options.streamstrue に設定する必要があります。

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

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

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

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

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

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

Nomad を使用して起動していない場合、Genvid SDK が統合されたアプリケーションは一度に 1 つしか実行できません。

Genvid SDK を使用しているアプリケーションを Nomad なしで起動した場合、デフォルトのセッション名が割り当てられます。Unity engine や Unreal engine でアプリケーションのテストを行う場合や、アプリケーションを手動で起動する際に便利です。

現在、環境変数 GENVID_SESSION_NAME をユニーク名に変更していない場合、Genvid SDK は、この方法で起動した複数のアプリケーションをサポートできません。Nomad を使用してアプリケーションを起動することで、この問題を回避することもできます。

この問題は、今後のリリースで修正予定です。

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

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

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 を再度行ってください。

Twitch における iPhone の問題

iOS デバイス上では Twitch API は getPlaybackStats() 呼び出しの属性の値を返さないため、同期のパフォーマンスが不正確であったり、一貫性がなかったりすることがあります。

インターネットの接続速度が遅いと、Ingest の実行中にゲームデータが非同期になることがあります。

Ingest で Studio を実行している場合、インターネット接続の速度が低下すると、ゲームデータがビデオストリームから非同期化されることがあります。スローダウンが解消すると、ゲームデータはビデオストリームに再同期されます。

Azure での bastion 名は5 文字以内である必要があります。

Azure で作業を行なう場合、最大 5 文字という制限があるため、bastion には短い名前を選ぶ必要があります。

Azure: アベイラビリティゾーンを変更する際には、リソースを破壊して再構築する必要があります。

このステップでは、パブリック IP が仮想マシンから切り離されていないため、パブリック IP の削除に失敗する可能性があります。これは Terraform プロバイダのバグです (詳細はこの issue を参照してください)。回避策としては、問題のあるパブリック IP を Azure ポータルの仮想マシンから手動で切り離します。

制限事項

誤った順序で設定をロードすると、値が上書きされることがあります。

クラウド上で SSL を使用している場合でも、ローカルクラスタで SSL を使用している場合でも、Web サンプルを読み込む前に youtube.sample.hcl を読み込むと、Web サンプルは web.hcl ファイルから embed_ssl に関連付けられた値を上書きします。

NTP の時間オフセットが大きいと、ストリームの再生ができなくなります。

大きな NTP 時間オフセットが発生した場合、ストリームの再生が停止する可能性があります。回避策としては、ゲーム機が自動的に時計を更新するように設定されていることを確認してください。ローカル設定では、AWS IP アドレスを pool.ntp.org に置き換えてください。

詳細については、 AWS 設定セクション を参照してください。

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

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

この問題が解決されるまで、複数の Studio ウィンドウから 1 つのコントロールへ入力することはお勧めできません。

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

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

AWS: 既存のクラスタでサブドメインを更新する際に、サブドメイン NS レコードを手動で削除します。

basic_cluster_alb_ssl または minimal_cluster_alb_ssl を使用して AWS クラスタを作成する場合、ドメインとサブドメインが提供されます。既存クラスタのサブドメインを更新する場合、以前のサブドメインの Route 53 の NS レコードをメインドメインから手作業で削除する必要があります。これは Terraform 内での NS レコードの処理のためです。

SDK はフレームレートを 1.0 以下に固定します。

問題を回避するためにストリームのフレームレートを 1.0 に下げました。フレームレートが 1.0 以下の場合は、SDK が 1.0 FPS に固定します。