Genvid SDK 1.0.0

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

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

現在の機能

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

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

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

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

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

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

適切なインストーラの使用

Zip アーカイブから適切なインストーラに変更しました。

ローカルスクリプトの統合

クラウド サポートに向けて、 ut4.py および tutorial.py は、両方の処理を行う、単一のスクリプト local.py に変更になります。詳細については、 Quick Tour Guide セクションを参照してください。

ログの新しいオプション

Nomad 0.5.1 へアップデートすることで、ログを追跡して、tail のみを取得する新しいオプションが追加されます。nomad-ui (Hashi UI と呼びます) のインターフェイスは、ジョブ内のファイルをチェックすることができます。

アノテーションと通知サポート

このバージョンで、アノテーション (時間が指定されたゲームイベント) と通知 (即時メッセージパッシング) に初めて対応しています。

コマンドチャンネル

この Genvid SDK バージョンでコマンドが初めてサポートされています。コマンドは、このチャンネルでアプリケーションからゲームに送信されます。この機能のデモンストレーションについては、チュートリアルの新しい admin ページを参照してください。

オーディオ サポート

オーディオのキャプチャ、ライブ配信が初めて実装されました。デフォルトでは無効になっていますが、設定ファイルで genvid.encode.input.silent = false を設定することで有効にすることができます。アプリケーションがバックグラウンドで実行されている場合、UE4 は無音になります。

Genvid_Connect()/Genvid_Disconnect() の廃止

内部仕様の変更により、ネイティブ SDK の Genvid_Connect()Genvid_Disconnect() 呼び出しを廃止しました。Genvid サービスへの接続は Genvid_Initialize() で行います。

Genvid_setParameter*()/Genvid_getParameter*() ルーチンへの変更

setParameteri()setParameterInt() に、 setParameterf()setParameterFloat() に、 setParameterp()setParameterPointer() に変更されました。同じ変更は getParameter*() でも行っています。文字列として値を取得するため、新たに getParameterUTF8() ルーチンを作成しました。さまざまな getParameter*() ルーチンは、ストリーム ID に "genvid.kv" を指定することで、Consul key:value ストアからシステム値を取得できるようになりました。

クラウド デプロイのサポート (ベータ版)

今回のバージョンには、AWS へのデプロイ サポートのベータ版が含まれていす。サポートは、現在の SDK と同じ場所にある補完パッケージ Genvid SDK Cloud Solution に含まれています。

本バージョンのバグ修正

Nomad-ui がログなどのファイルを表示できるようになりました。

Nomad 0.5.1 へのアップグレードにより、 nomad-ui (現在の名称 Hashi UI) が、アロケーションディレクトリの中身を正しく表示できるようになりました。

バイナリパスに、スペースが使用できるようになりました。

Nomad の厳格な検証ルール のため、ジョブで使用する実行ファイルのパスを指定する際に、スペースを使用できませんでしたが、この問題は解決しました。適切な場所に引数を使うのを忘れないでください。

ネイティブ SDK の大幅なメモリ消費の問題を修正

ネイティブ SDK がサービスとの接続を失うと、ビデオフレームがキューに入れられ、仮想メモリの空間が少なくなり、システムが応答しなくなります。変更された処理により、RAM の総使用量は制限されますが、フレーム落ちが発生する可能性があります。

既知のバグ

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

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

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

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

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

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

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

オーディオが同期しない

オーディオに若干同期のズレが発生する場合があります。次回のリリースで修正予定です。それまでは、設定ファイルでビデオの遅延を設定することで、ビデオに遅延を追加してください。デフォルト値は genvid.encode.output.videodelay = "1250ms" (最後が ms で終わる文字列の形式) です。

シャットダウン後、AWS サーバーが正常に動作しない

サーバーを停止すると、パブリック IP アドレスが消失し、システムが新しいアドレスをうまく取得できなくなります。 cloud.py reinstall でサーバーを再インストールする必要がありますが、これには長い時間がかかります。クラウド サポートの公式リリースで、この問題が解消できるよう開発を進めています。