Genvid SDK 1.26.0

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

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

現在ご利用になれる機能

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

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

その他変更点や修正点

  • [解説書] 不足していたメトリクス、説明の詳細、新しいユニット欄を追加。

  • [解説書] Services エンドポイントの出力例を修正。

  • [解説書] 解説書の GCL の表にメトリクスを追加。

  • [解説書] SDK サービスのメトリクスの解説を改善。

  • [sdk] GVEncode から送信される 2 つのメトリクスの名前を変更し、タイプミスを修正:
    • compostionssentcompositionsent に変更。
    • compostionssentsizecompositionsizesent に変更。
  • [sdk] メトリクス delayedframe および delayedframesize が間違った値を送信する問題を修正。

  • [sdk] エラーコードを理解できるエラーに変更することで、エラーメッセージを改善。

  • [sdk] Cluster-UI の設定から Stream Enabled オプションを削除。

  • [sdk] ストリームとアノテーションのフォーマットに関する SDK ログの読みやすさを改善。

  • [sdk] 解析エラーが発生した場合、Consul でのキーの取得が失敗する問題を修正。

  • [sdk] WASAPI が有効な場合、オーディオストリームの粒度が自動的にサンプリングレートに設定されるように更新。

  • [sdk] DirectX 11 のスワップチェインまたはテクスチャがエラーを返したときのログレポートの欠落を修正。

  • [sdk] composeD とネイティブ SDK が、NATS アドレスを再設定してしまう問題を修正。

  • [gvencode] 初期化時に GVEncode がクラッシュする問題を修正。

  • [gvencode] オーディオバッファのログに誤った時間が報告されることがある問題を修正。

  • [gvencode] コンポジションモードで、オーディオデータをビデオデータより先に送信すると、オーディオとビデオが非同期となる問題を修正。

  • [gvencode] ピクチャ・イン・ピクチャやクロマキーを使用した場合、ロード時にゲームデータがフリーズする不具合を修正。

  • [gvencode] ピクチャ・イン・ピクチャやクロマキーでの合成データが不正になる不具合を修正。

  • [composed] 適切な A/V ストリームが存在しない場合に、 composeD がデータフレームを送信してしまう問題を修正。

  • [composed] ソースディレイを変更すると、データが永久に同期しなくなる問題を修正。

  • [gvencode] JSON エラーが発生した場合、 composeD の起動時にクラッシュする問題を修正。

  • [composed] アノテーションに同期と合成のストリームが存在すると、解析エラーが発生する問題を修正。

  • [rootd] rootD サービスのメトリクスを追加。

  • [rootd] Session: read error:read tcp : i/o timeout をエラーから警告に変更。

  • [rootd] データキャッシュに無効なエントリーが追加されるのを防ぐためのフィルターを追加。

  • [rootd] composeD との通信において、より適切なエラー処理を追加。 (具体的には、プロトコルエラー時の切断や、一度に 1 つのセッションしか許可しないことなど。)

  • [rootd] 反応しなくなった leaf を切断するように rootD を修正。

  • [rootd] type=notifications でタグ付けされた StreamFormat メッセージのメトリクスを type=format に変更。 (これは、ストリームの終了を知らせる StreamFormat メッセージにのみ影響します。)

  • [rootd/leafd] アノテーションキャッシュに無効なデータが含まれていると、 rootD/leafD がクラッシュする可能性があるという問題を修正。

  • [rootd/leafd] composeD、rootD、leafD 間の接続問題を引き起こす可能性のある競合状態を修正。

  • [leaf/web] Web クライアントとサーバー間の WebSocket 認証プロセスを変更。認証情報が WebSocket URL 経由で渡されます。エラーがあれば WebSocket コントロールメッセージを通じて返され、同時に WebSocket が閉じます。

  • [leafd] メッセージ送信時のエンコード数を減らすことで、リーフの CPU 使用率を最適化。

  • [studio] 両方にカスタムワイプトランジションが適用された 2 つのシーン間をカットするときに、一方ではなく両方にデフォルトのワイプトランジションが適用される問題を修正。

  • [studio] Studio をサービスジョブの一部に変更し、Studio サンプルを削除。

  • [studio] 初期化時に、Studio オーディオミキサーの状態が実際のコンポジションと異なる問題を修正。

  • [studio] ページを再読み込みすると、ストリームのシーンとプログラムのシーンが一致しなくなる問題を修正。

  • [studio] Studio の起動時やコンポジションの値を変更したときにトランジションエラーが発生する問題を修正。

  • [ue4] Unreal Engine 4.26.1 Genvid プラグインに対応。

  • [unity-plugin] Windows 以外のプラットフォームでプラグインをビルドしたときに Unity で発生するコンパイルエラーを修正。

  • [unity editor plugin] editor GUI でリペイントを行うと、例外が発生する問題を修正。

  • [ut4-sample] プラグインのシムリンクが無効な場所を指しているために、Unreal Tournament 4 を構築するための環境のセットアップに失敗するバグを修正。

  • [cube サンプル] 2 つのキューブのサンプルソースがストリーミングしている状態で Web クライアントのページを更新すると、キューブのヘイローが同期しなくなる問題を修正。

  • [cube サンプル] 管理用のリセットボタンが位置のリセットのみを行い、キューブの方向、回転、速度のリセットができない問題を修正。

  • [cube サンプル] ピクチャ・イン・ピクチャやクロマキー合成を使用した場合、オーバーレイに背景ではなく前景のソースデータが表示される問題を修正。

  • [loadtester] loadtester サンプルのビルドの問題を修正。

  • [remotegui] remoteGUI に、オーディオおよびビデオストリームに加えて、データストリーム情報を追加。

  • [bastion-api] IP が変更されたときに、cluster API をそのクラスタに再接続するためのリトライメカニズムを追加。 (クラスタのアップデート時など。)

  • [bastion-api] AWS クラスタから cidr 環境変数を削除。

  • [bastion-api] サブネットで使用する CIDR ブロックのサイズを設定するための変数 subnet_cidr_block_size を追加。

  • [bastion-api] AWS でアベイラビリティゾーンの数を変更したときのサブネットの競合のバグを修正。

  • [bastion-api] Bastion に Terraform モジュールをインポートする際に、入力変数 bastionid に bastion サーバー名を自動的に入力するように変更。

  • [bastion-ui] Terraform の設定における map 変数の UI を修正。

  • [bastion-ui] Terraform の Commands ページでクローンされたクラスタのコマンドボタン (Plan ApplyDestroyInit 、など) を無効化。これにより、クラスタの初期化完了前にユーザーがこれらのコマンドを使用することができなくなります。

  • [bastion-ui] クラスタの初期化中に Terraform の Commands ページのコマンドボタンが無効になった場合に、ユーザーに通知される警告メッセージを追加。

  • [bastion-ui] Terraform の Settings UI でマップ/リストの変数の種類を選択するドロップダウンメニューを削除。変数タイプフィールドは、文字列のみを受け付けるようになりました。

  • [bastion-ui] クラスタ作成時のクラスタ名の最大制限を 64 文字に変更。

  • [bastion-ui] クラスタ UI のストリーム設定から YouTube 固有の VideoID フィールドを削除し、 encode.stream.channel に選択したストリーミングサービスの用語をラベル付けしました。(詳細は YouTube 解説書 を参照してください。)

  • [bastion-api, consul-api] consul-template の統合における競合状態を修正。

  • [cluster-api] 将来の拡張のために、Genvid の設定スキーマを取得するための新しい API GET /v1/settings/schema を追加。

  • [toolbox] genvid-sdk upload* コマンドとサンプル upload-images コマンドに新しいリージョンパラメーターを追加。

  • [toolbox] 読み込み後に設定を返すように genvid.toolbox.SDK.load_config を変更。

  • [ツールボックス] genvid.toolbox.SDK.load_configgenvid-sdk load-config の両方に、設定を読み込んだ後に自動的に設定しないようにする dryrun パラメータを追加。

  • [ツールボックス] Python 3.5 で genvid-sdk load-config <file> がロードされないバグを修正。

  • [aws] Name タグの名称を genvid:cluster-name に変更。反映させるには、フィルターを更新する必要があります。)(詳細は、アップグレードノート を参照してください。

  • [aws] AWS リソースから NAME を削除。

  • [aws] AWS リソースのタグを、識別のために genvid:cluster-namegenvid:creator-service-id で更新。

  • [aws] AWS の番号付きリソースからインデックスオフセットを削除。1 からではなく、0 からになります。

  • [aws] クラスタを更新し、256 文字までの名前に対応。

  • [aws] minimal_cluster_alb_ssl に変数 reusable_delegation_sets_id を追加。この変数は、ユーザーが使用したい再利用可能なデリゲーションセットを指定することができます。none を指定した場合、AWS に none が送信されます。

    再利用可能なデリゲーションセット ID は、 minimal_alb_ssl の新しい変数 reusable_delegation_sets_id を使って送信できます。

  • [azure] すべてのリソースに一般名を追加。

  • [aws] AWS リソースのタグを、識別のために genvid:cluster-namegenvid:creator-service-id で更新。

  • [aws] AWS の番号付きリソースからインデックスオフセットを削除。1 からではなく、0 からになります。

  • [aws] クラスタを更新し、256 文字までの名前に対応。

  • [azure] Azure のリソースグループの名前を更新し、常に resource_group_name 変数の値 (ユーザーが指定した場合) か、bastionid-clustername となるようにしました。

  • [terraform] すべてのクラスタに新しい custom_tags 設定を追加。ユーザーがクラスタのリソースにカスタムタグを追加できるようになりました。

  • [terraform] Terraform 変数 StageNamespace を削除。

既知の問題

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

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

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

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

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

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

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

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

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

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

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

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

Genvid SDK を使用したアプリケーションを Nomad を使用せずに起動した場合、デフォルトのセッション名が割り振られます。Unity エンジンや Unreal エンジンでアプリケーションをテストするときや、アプリケーションを手動で起動するときに便利です。

現在、環境変数 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() 呼び出しの属性の値を返さないため、同期のパフォーマンスが不正確であったり、一貫性がなかったりすることがあります。

スタンドアロンプレーヤーでの iOS デバイスへのストリーミングは現在、機能していません。

スタンドアロンプレーヤーでの iOS デバイス (iPhones と iPads) へのストリーミングは現在、機能していません。この問題は、今後のリリースで修正予定です。

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

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

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

Azure で AZ を変更する際に、パブリック IP が仮想マシンから切り離されていないため、パブリック IP の削除に失敗することがありました。これは、Terraform プロバイダのバグです。詳しくは、Hashicorp Github の issue をご覧ください。

回避策としては、問題のあるパブリック IP を Azure ポータルの仮想マシンから手動で切り離します。

ツールボックスは Python 3.9.x との完全な互換性はありません。

Genvid ツールボックスは、現時点では Python 3.9.x との完全な互換性はありません。ツールボックスを使用する際の問題を避けるため、Python をバージョン 3.8.x にダウングレードすることをお勧めします。

genvid-sdk upload-images-sdk コマンドが、Azure Cloud 上での Docker イメージのアップロードに失敗します。

一部の Docker イメージは、サイズが大きいため、 genvid-sdk upload-images-sdk コマンドを使用して Azure Cloud にアップロードできません。(SSL エラーと Max retries exceeded のメッセージが表示されます)。

回避策:

  1. Azure UI を開きます。
  2. イメージを手動でアップロードします。
  3. もう一度 genvid-sdk upload-images-sdk を起動します。

Chroma Key Filter 使用時のパフォーマンスの問題

Chroma Key Filter を使用する場合、エンコードマシンには c5.4xlarge 以上のものを使用することをお勧めします。性能の低いインスタンスでは、システムがいくつかのフレームをメモリに蓄積することになり、メモリ不足となる場合があります。

蓄積されるフレームの量は、エンコードパラメータ、ソースの FPS、ソース画像の内容の変化、内容の密度など、さまざまな要因に左右されます。 GVEncode のメモリー使用量の監視については、Hashicorp documentation を参照してください。

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

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

AWS を使用しているクラスタ basic_cluster_alb_ssl のサブネットを削除できません。

basic_cluster_alb_sslsubnet_cidr_block_size を変更したり、AZ の数を減らしたり、既存の AZ を並べ替えたりすると、クラスタはサブネットを削除しようとして止まってしまいます。

設定を再適用しても、問題は解決しません。

回避策: クラスタを削除して作り直してください。

Bastion クラスタの設定ページのモーダルウィンドウが閉じない。

クラスタの Bastion 設定 ページで、クリックしても、カスタムタグの Properties モーダルウィンドウが閉じない。

回避策としては、もう一度 Properties をクリックしてモーダルウィンドウを閉じてください。

制限事項

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

クラウド上で 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 だけでは不十分です)。

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

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

Azure リソースグループ名のデフォルト値が長すぎる場合がある。

変数 resource_group_name に値が設定されていない場合、 {bastionid}-{clustername} の組み合わせで設定されます。そのため、Azure リソースグループ名が最大文字数である 64 文字よりも長くなってしまう場合があります。

この問題を避けるために、変数 resource_group_name には必ず 64 文字以下の値を指定してください。

Azure での命名についての詳細は Azure Github を参照してください。

AWS クラスタサブネットの競合エラー

AWS クラスタの subnet_cidr_block_size を減らして AZ 数を増やすことを同時に行うと、サブネットの競合エラーが発生します。

この問題が発生した場合、設定を適用しなおしてください。

クラスタの更新時に、Azure ディスクに新しいタグが追加されない。

新しいタグを Azure クラスタに適用する際、ディスクを所有する仮想マシンインスタンスが apply プロセス中に再作成されない限り、 disk にタグは適用されません。

回避策としては、クラスタを削除して再作成することで問題が解決します。

クラスタ名は 64 文字までです。

クラスタ名は、Windows のファイルシステムの制限により、64 文字に制限されています。ファイルディレクトリの最大文字数には、システムのユーザー名やクラスタ名などが影響します。

技術的には 64 文字以上にすることは可能ですが、結果は予測できないものになります。