Genvid SDK 1.31.0¶
Genvid SDK 1.31.0 へようこそ。このリリースで、安定した状態で統合を行うことができ、ローカルでの開発や、限定したクラウドでのデプロイに使用することができます。プロダクションを完全にデプロイするための一部の機能はまだ実装されていませんが、他のソフトウェアによって提供可能です。プロダクションのデプロイを予定している場合は、support@genvidtech.com にお問い合わせください。
プロダクションの快適なデプロイを行うための機能がすべて備わるまで、定期的にリリースの更新を行う予定です。リリース間のアップグレードをスムーズに行うことができ、可能な限り後方互換サポートを行えるよう、常に努力しています。既知の問題や回避策については AnswerHub でご参照ください。詳細についてのご不明点は、弊社までお問い合わせください。
現在の機能¶
現在の機能の概要を紹介します。本リリースの新機能一覧は以下の 主な修正と変更 を参照してください。
- ビデオとゲームデータストリームの自動同期。
- YouTube および Twitch へのライブ動画配信。
- 埋め込み型 Web ページ用 Javascript SDK。
- オーディオ/ビデオおよびデータの複数のソース。
- 任意の追加ゲームイベントおよび通知のライブ配信。
- スケーラブル イベント メッセージ システム。
- Windows C++ API、C# ラッパー。
- ビデオエンコード (H264 + AAC)。
- Unity3D 統合 (ゲームと管理)。
- Unreal Engine 統合 (ゲームと管理)。
- D3D11 または未処理フレームのビデオキャプチャ。
- WASAPI オーディオキャプチャ。
- ローカル、リモートクラスタの管理用ツール、スクリプト。AWS および Azure 用サンプルスクリプト。
- ライブ動画編集と基本コンポジション効果 (ベータ版)。
- RTMP Ingest サーバー (ベータ版)。
- サービス制御用 REST API (ベータ版)。
- メトリクス フィード (ベータ版)。
- 負荷テスト用ライブラリ。
- 複数の統合サンプル。
- 詳細な解説書。
主な修正と変更¶
クリーンインストール¶
Microsoft Visual C++ Build Tools 2015 がインストールされていないコンピュータにインストールを行うと、 A setup package is either missing or damaged (セットアップパッケージが存在しない、または破損しています) というエラーメッセージが表示される問題を修正しました。
その他変更点や修正点¶
- [解説書] リリース、アップグレードに関する注意事項のページを減らすことにより、検索結果を改善。
- [解説書] UT4 cloud の解説書で無効なパスを訂正。プロジェクトをビルドできるようになりました。
- [ツールボックス]
genvid-azure-image
ツールのcreate-images
コマンドを改良し、中間イメージリソースとインポートされた VHD blob を完了後に削除するようにしました。この処理をスキップして、中間リソースを保持するには、新たに追加された--keep-intermediate-resources
オプションを使用してください。 - [ツールボックス]
genvid-azure-image
ツールのcreate-images
コマンドを改良し、現在ログインしている Azure CLI サブスクリプションからアクセス可能なプライベート blob ストレージコンテナで動作するようになりました。 - [ツールボックス]
genvid-bastion
を改良し、GENVID_BASTION_CONFIG_FOLDER
のコンテンツから設定を読み込むようになりました。 - [ツールボックス] 環境変数
GENVID_BASTION_CONFIG_FOLDER
、GENVID_BASTION_JOB_TEMPLATE_FOLDER
を追加し、genvid-bastion
コマンドがジョブ設定を探す場所を設定できるようになりました。メンバーgenvid.toolbox.RuntimeTool.template_dir
を廃止し、GENVID_BASTION_JOB_TEMPLATE_FOLDER
に変更。 - [ツールボックス]
genvid-sdk load-config-sdk
にフォルダから設定を読み込む機能の追加。新しいフォルダ{ROOTDIR}/local-services
を作成しローカルservices.nomad.tmpl
を{ROOTDIR}/bastion-services/templates
から{ROOTDIR}/local-services/templates
移動しました。 - [ツールボックス]
genvid-sdk -c {clusterid} setup
を改良し、フォルダROOTDIR/cloud-services/setup
から設定を読み込むようになりました。 - [ツールボックス] リモートクラスタの初期設定を改良し、クラスタ設定にログを追加しました。
- [ツールボックス]
SDK.update_config
メソッドをProjectTool
ベースクラスに移動し、使いやすさを向上。メソッドのシグネチャーも変更されています。詳しくは、アップグレードに関する注意事項をご覧ください。 - [ツールボックス]
genvid-bastion
相当のコマンドと同じ動作を行うgenvid-sdk env
コマンドを追加。 - [ツールボックス] クラスタを管理する Cluster API のバージョンを表示する
genvid-sdk cluster-version
を追加 (以前はgenvid-sdk version
の関数でしたが、ツールボックスのバージョンを返すようになりました)。 - [composed] ゲームの接続が失われた時にクラッシュが発生する問題を修正。
- [gvencode] ClusterUI であり得ないチャンネルやキーを付与するとシステムがクラッシュする問題を修正。
- [gvencode] テンプレートにコーデックが定義されていない場合、ビデオ設定に無効な値が渡される問題を修正。
- [gvencode] Cluster API Health の呼び出しが多すぎて、 composeD と GVencode の間の接続がブロックされるネットワークの問題を修正。
- [studio] ユーザーがシーン名を編集すると、ビデオミキサーのソースフィールドのドロップダウンメニューが空白になる問題を修正。
- [cube-sample] DirectX サンプルのコンパイル時に警告が発生する問題を修正。
- [bastion-api] レンダリング環境に
CLUSTER_ID
を渡すように、クラスタの設定ジョブテンプレートを改善。 - [nats]
nats-window
パッケージの名前をnats-windows
に修正し、タグ付けに NATS バージョンを使用するようにしました。ジョブ名、タスク名、ログ名にも影響します。 - [nats]
nats-windows
タスクをクラウドのnats
ジョブに組み込みました。 - [nats] NATS サーバーが常に設定ファイルを再読み込みしているため、クラッシュする可能性がある問題を修正。
- [nats] NATS Linux を改良し、NATS Windows バージョンと同期させました。
- [cluster-ui]
services/leaf/compression
フィールドに、true
やfalse
とは別に空の選択肢が表示される問題を修正。 - [cluster-ui, bastion-ui] ユーザーが UI のドキュメントリンクにアクセスすると、Page not found error のエラーが表示される問題を修正。
既知の問題¶
プロキシを使用している場合に Compose ウィンドウが使用できない。¶
Bastion の将来のバージョンには、異なるマシンからのアクセスを許可するリモートサーバーが追加されます。現行バージョンではこの機能を限定的にサポートしており、Bastion ホストがクラスタファイアウォールに守られている場合に (Amazon EC2 マシンなど)、問題が発生することがあります。
回避方法としては、マシンのローカル IP がクライアントマシンからアクセスできるように、Bastion マシンへの VPN 接続を行うことです。
オートカットのチェックボックス設定はローカルにのみ保存されます。¶
Studio では、Scene Widget 内の自動カットチェックボックスの設定はローカルストレージにのみ保存されます (ブラウザのキャッシュがクリアされるとユーザーからの入力もクリアされます)。また、Studio セッション終了時に自動カットが「オン」になっている場合は、Studio セッションを再び開始すると、デフォルトで「オフ」に戻ります。
オーディオがマイクの音声やループを無限にキャプチャする。¶
WASAPI のオーディオ自動キャプチャモードを使用した時に、マシンのデフォルトのオーディオデバイスを通過する音がすべてキャプチャされてしまいます。Web ブラウザだけでなく、システムアラート、マイク入力も含まれます。ゲームを実行しているのと同じローカルマシンを使用してゲームストリームをテスト視聴すると、ゲームは自分自身のオーディオストリームを~10秒の遅延でキャプチャします。これが次第に音質が劣化する (ストリーミングされる度に圧縮されるため) エコーを生み出します。
オーディオを無効にするには、次の 2 つの方法があります。
- 設定で
settings.encode.input.silent
をtrue
にする (デフォルト設定) 。 - 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_type を Standard_NV6_Promo に変更し、コマンドページで Plan apply -> Apply を再度行ってください。
Twitch における iPhone の問題¶
iOS デバイス上では Twitch API は getPlaybackStats()
呼び出しの属性の値を返さないため、同期のパフォーマンスが不正確であったり、一貫性がなかったりすることがあります。
スタンドアロンプレーヤーでの iOS デバイスへのストリーミングは現在、機能していません。¶
スタンドアロンプレーヤーでの iOS デバイス (iPhone、iPad) へのストリーミングは現在、機能していません。この問題は、今後のリリースで修正予定です。
インターネットの接続速度が遅いと、Ingest の実行中にゲームデータが非同期になることがあります。¶
Ingest で Studio を実行している場合、インターネット接続の速度が低下すると、ゲームデータがビデオストリームから非同期化されることがあります。スローダウンが解消すると、ゲームデータはビデオストリームに再同期されます。
RemoteGUI インターフェイスでは、ローカルクラスタのリンクは無効です。¶
ローカルクラスタで RemoteGUI を使用している場合、コンポジション、エンコーディング、SDK GUI ボタンからリンクをクリックしてタブを開くと、リンクが無効になります (青から赤に変わります)。当該タブを閉じるとリンクは再び有効になります。
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
のメッセージが表示されます)。
回避策:
- Azure UI を開きます。
- イメージを手動でアップロードします。
- もう一度
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_ssl
の subnet_cidr_block_size
を変更したり、AZ の数を減らしたり、既存の AZ を並べ替えたりすると、クラスタはサブネットを削除しようとして止まってしまいます。
設定を再適用しても、問題は解決しません。
回避策: クラスタを削除して作り直してください。
Bastion クラスタの設定ページのモーダルウィンドウが閉じない。¶
クラスタの Bastion 設定 ページで、クリックしても、カスタムタグの Properties モーダルウィンドウが閉じない。
回避策としては、もう一度 Properties をクリックしてモーダルウィンドウを閉じてください。
Terraform をアップグレードすると 『Error: Failed to query available provider packages』 が発生します。¶
既存のクラスタを Terraform 0.14 にアップグレードする場合、Error: Failed to query available provider packages が発生することがあります。Terraform のロックファイルを %USERPROFILE%.genvidterraformworkdir{cluster name}tf から削除してクラスタを初期化しなおすと解決することができます。
制限事項¶
誤った順序で設定をロードすると、値が上書きされることがあります。¶
クラウド上で 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 文字以上にすることは可能ですが、結果は予測できないものになります。
短時間に複数のサービスが再起動すると、ローカルクラスタが反応しなくなることがあります。¶
ローカルの bastion/cluster のデプロイでは、1つの Consul エージェントのみを使用しており、クライアントごとに 200 の同時接続しかできません。ブロッキングクエリを使用しているため、短時間にすべてのサービスを複数回再起動すると、 Consul への最大同時接続数に達してしまう可能性があります。
この問題を回避するには、30 秒待ってからサービスの再起動を行うことをお勧めします。