VRED Stream

VRED には Web サーバが統合されており、Python API、Web API、低遅延ビデオ ストリーミング機能が組み込まれています。Python API および Web API では HTTP エンドポイントが使用されますが、ストリームは全二重通信を行うために WebSocket を介して提供されます。

VRED Stream について説明する場合は、Stream JPG および Stream H264 の機能について説明することになります。これらは VRED ビューポートのライブ イメージ ストリームです。VRED Stream では、シーン内をナビゲートしたり、タッチ センサーを使用したり、HTML 5 コンテンツとの対話操作を実行したりできます。

注:

VRED Stream アプリは別の機能です。詳細については、「VRED Stream アプリ」を参照してください。

ストリーミング イメージ データは JPEG または H264 としてエンコードされます。このような場合、H264 の方が自然に見えますが、JPEG を過小評価してはなりません。JPEG の方が必要な帯域幅は多くなりますが、非常に高速で、VRED 用のエンコーダが別途必要になることはありません。クライアント側で特別なデコーダを使用する必要もありません。また、OpenH264 v2.x コーデックでは、最大解像度である 3840 x 2160 のみがサポートされています。

接続

ストリームの終点は {schema}://{host}:{port}/socketstream です。たとえば、TLS を使用してローカル インスタンスに接続する場合、これは URI になります。

wss://localhost:8888/socketstream

WebSocket のバイナリ タイプは arraybuffer です。

入力データ

VRED は、WebSocket 接続を介してフレームごとに 2 つのメッセージを送信します。1 番目のメッセージは、ストリーム形式といくつかの追加情報を含む JSON シリアル化文字列です。2 番目のメッセージは、フレーム イメージ データを含むバイナリです。

{
    "format": {
        "codec": "h264",
        "width": 1024,
        "height": 1320,
        "fps": 60,
        "bitrate": 8000,
        "quality": 85,
        "fixed": 0
    },
    "clients": 1
}
名前 タイプ 説明
format.codec 文字列 バイナリ イメージ データに使用されるストリーム コーデック。現在、サポートされているコーデックは jpeg および h264 です。
format.width 数値 イメージ データの幅。
format.height 数値 イメージ データの高さ。
format.fps 数値 1 秒当たりの最大フレーム数の上限。
format.bitrate 数値 H264 コーデックに使用されるビットレート。
format.quality 数値 JPEG コーデックに使用されるイメージ品質。
format.fixed 数値 ストリーム形式が固定されていて、変更できないことを示すブール値。
clients 数値 同じ VRED インスタンスに接続されているクライアントの数。

バイナリ イメージ データの最初の 4 バイトには、フレーム番号が含まれています。デコーダにイメージ データを送信する前に、この番号を抽出する必要があります。また、フレームを同期させるには、フレーム番号を VRED に戻す必要があります。詳細については、「出力データ」を参照してください。

出力データ

バージョン 2021.3 以降の VRED では、クライアントが処理できるフレーム数を自動的に管理できます。このため、レンダリングされたフレームを認識するためのフィードバックをクライアントから VRED に送信する必要があります。文字列メッセージは sync(${frame}) のようになります。

sync だけでなく、ナビゲーション コマンドなども、このチャネルを介して VRED に送信できます。次に、すべてのコマンドの表を示します。

コマンド パラメータ 説明
dblclic button: 数値、keyModifier: 数値、x: 数値、y: 数値 マウスをダブル クリックする -
keypress keyCode: 数値、keyModifier: 数値、x: 数値、y: 数値 キーを押す、またはキーを押し下げる keypress(-10, 0x04000000, 483, 281)
mousedown button: 数値、keyModifier: 数値、x: 数値、y: 数値 マウス ボタンを押し下げる mousedown(-10, 0x02000000, 483, 281)
mouseup button: 数値、keyModifier: 数値、x: 数値、y: 数値 マウスボタンを放す mouseup(-10, 0, 483, 281)
mousewheel delta: 数値、keyModifier: 数値、x: 数値、y: 数値 マウス ホイールを回す mousewheel(-10, 0, 483, 281)
sync frame: 数値 VRED とクライアント間でフレームを同期します。 sync(128)
update - 新しいフレームをレンダリングするように VRED を設定します。 update()

パラメータの説明:

操作を行うたびに、VRED は 1 つ以上の新しいフレームをレンダリングします。さらにフレームがレンダリングされるかどうかは、レンダー設定によって決まります。たとえば、アンチエイリアシングが有効になっている場合、VRED は複数のフレームを送信します。

形式を変更

ストリーム形式は、個別の端点 /stream/param? を介して変更できます。たとえば、フル HD および JPEG エンコーディングを使用する形式を、URL になり、TLS を使用するローカル インスタンスに変更する場合は、URI になります。

GET https://localhost:8888/stream/param?width=1920&height=1080&format=jpeg&quality=85&fps=30

次に、すべてのパラメータの表を示します。

名前 タイプ 説明
format 文字列 ストリーム コーデック(jpeg または h264)。
width 数値 ストリーム イメージの幅。
height 数値 ストリーム イメージの高さ。
fixed ブール値 解像度が固定されていて、fixed = false が送信されるまで変更できないことを示します。
fps 数値 1 秒間にクライアントに送信される最大フレーム数を制限します。
bitrate 数値 H264 コーデックのビットレート(通常は、200016000 の値)。
quality 数値 JPEG エンコーダのイメージ品質。値の範囲は 1 (圧縮率が最大)から 100 (品質が最大)までです。