Genvid SDK 1.6.0

Genvid SDK 1.6.0 へようこそ。このリリースでは、まだプロダクションのデプロイを行うことはできませんが、完全な Genvid のライブ配信体験を既存のプロジェクト内に開発できます。

当社の開発チームは、プロダクションのデプロイが可能な SDK のバージョンを近日中に公開できるよう日々努力を積み重ねています。また今後のリリースで、スムーズな移行ができると期待しています。それまでに、是非とも統合を始めておかれることをお勧めします。

現在の機能

現在、ゲームを実行して YouTube にライブ配信するためのコア機能が用意されています。また、実際の Genvid のストリーミング体験を実現するゲームの追加イベントやメッセージなども用意されています。

  • C++ API、C# ラッパー
  • D3D11 ビデオキャプチャ
  • WASAPI オーディオキャプチャ
  • ビデオエンコード (H264 + AAC)
  • YouTube へのライブ動画配信
  • 任意の追加ゲームイベントおよび通知のライブ配信
  • スケーラブル イベント メッセージ システム
  • ビデオとゲームデータストリームの自動同期
  • 統合しやすいネイティブおよび Web SDK
  • サンプル チュートリアル プロジェクト
  • サンプル Unreal Engine 4 プロジェクト
  • サンプル Unity チュートリアル
  • 詳細な解説書
  • ローカル デプロイ用ツールとスクリプト
  • クラウド デプロイ用ツールとスクリプト (ベータ)
  • サービス制御用 REST API (ベータ版)

今後追加を予定している機能

さらに、最初のローンチ後にリリースされるすべての新機能のパイプラインを作成中です。

  • クラウドでクラスタを直接管理する bastion ホスト
  • シークレット (secret) パラメータの取り扱いの安全性向上
  • ユーザーの認証と確認
  • 対応動画フォーマットの追加
  • ハードウェアエンコード
  • 複数のデータセンターに対応
  • 複数の配信セッション管理
  • 同一インスタンス、または複数のインスタンスからの、複数の動画およびデータのストリーミング
  • 外部ソースからのオーディオ/ビデオストリーミングをサポート
  • インスタント リプレイ
  • ライブ動画編集と基本コンポジション効果
  • データストリームのオフライン録音と再生
  • オフライン配信セッション編集

このバージョンの主な変更点

Unity editor SDK をサポート

スタックが開始されると、Unity editorで再生と停止が使用できるようになります。再生中は、SDK を利用してビデオ、オーディオ、データが適切にストリーミングされます。また、Web ページ上で直接結果を確認することができます。

Cluster API の C# バインディング

Cluster API 用の C# バインディングを作成し、Unity に統合しました。Unity から直接サービスを開始したり停止したり、Genvid UI インターフェイスを開いたりできるようになりました。近日中にさらなる機能を公開予定です!

Unreal Engine 4 の新しい Genvid プラグイン

新しい Unreal Engine 4 プラグインを提供します。これは、Blueprint コンポーネントを使用して Genvid SDK を公開するプラグインで、従来よりもコードへの負担が軽減されました。以前のリビジョンからアップグレードした場合、以前のものも新しい Genvid.dll で引き続き動作します。したがって、Genvid DLL だけを更新するか、新しい blueprint インターフェイスを使用するか、どちらでも自由に選ぶことができます。

SDK による接続のバックグラウンド処理

ユーザー側からは実感しづらいものの、サービスや SDK の接続切れや中断が起こりにくくなっています。特に、SDK は、構成へのアクセスを含め、サービスへのすべての接続をバックグラウンドで処理します。つまり、サービスを実行せずにゲームを実行でき、 Genvid_Initialize が接続待ちをブロックしてしまうことがなくなりました。ただし、一部の API では、今までのように GenvidStatus_Disconnected エラーが出て失敗する可能性もあります。切断中にストリームが中断された場合でも、各データストリームの最新のデータを保持しています。データ受信は行われず、アノテーションや通知は破棄されますが、サブスクリプションは持続されます。中断時を除き、ストリームが再確立された時に、視聴者にスムーズな視聴体験を提供できます。

その他変更点や修正点

  • [ut4] Unreal Tournament のアップデートを 2017 年 5 月 16 日に公開。
  • [cloud] バージョンが変更されていなくても、最新版の使用を確実に行うため、 DockerTool.RE_DIRTY_VERSION に一致するバージョン番号 (デフォルトでは latestdev 、または [.+]dirty で終わるもの) の Docker イメージは強制的に排除されます。web ジョブの使用方法については、nomad テンプレートを参照してください。
  • Unity サンプルの Json の連番で、カンマの欠落を修正。
  • スクリプトのロギングレベルを設定できるように、GENVID_TOOLBOX_LOGLEVEL の環境変数を追加。
  • AWS サーバーが再起動時に外部 IP アドレスを正しく更新するようになりました。
  • [tools] docker-machine を v0.12.2 にアップデート。AWS での AMI の作成修正。

既知のバグ

このリリースでは一部のバグが未修正のまま残っていますが、まもなく修正する予定です。

デフォルトの WASAPI インターフェイスで、オーディオ入力フォーマットを正しく設定できない

現時点では、入力フォーマットは WASAPI インターフェイスでは正しく設定されていません。この問題を回避するに、デフォルトのインターフェイスの 1 つとして、クラウド上のオーディオ形式を強制的に使用しています。再生中のポップ音が聞こえないようにするには、マシンの設定に合わせて、同じ処理をローカルで行う必要があります。将来のバージョンでは固定の構成設定での対応ではなく、入力形式に自動的に適応するように修正します。

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

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

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

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

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

ループバックデバイスでオーディオをキャプチャしているため、ゲームを実行しているマシンを通過するすべてのサウンドがキャプチャされます。これには、システムアラートやマイク入力だけでなく、Web ブラウザも含まれます。ゲームを実行しているマシンからゲームストリームを鑑賞した場合、最大 10 秒の徐々に音質が劣化 (ストリーミングのたびに圧縮がかかるため) するエコーがかかった状態で、ゲーム自体のオーディオをキャプチャしているのが確認できます。推奨する解決策としては、オーディオを無効にする (設定ファイルの genvid.encode.input.silent = true) 方法、または、Web サイト監視に別のマシンを使用することです。この問題は、ゲームをクラウド環境でデプロイした際には、発生しません。

Unity アプリケーションが最前面でなくなると、短いハングアップが発生することがある

スタックを使用して Unity アプリケーションを実行中、別のウィンドウに切り替えると、数秒後に短時間のハングアップが発生することがあります。このハングアップは、マウスを動かすと解消されます。ビデオ、オーディオ、データのキャプチャには影響しません。

nomad の docker ジョブが、常に stderr から stdout ログファイルにリダイレクトする

リリース直前にこうした動作が発生し、現在、その原因を調査中です。一時的に、 cloud.py で対策していますが、docker で nomad を使用してジョブを実行している場合、ログファイルが stderr に記録されないなどの影響を受ける場合があります。