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() |
パラメータの説明:
button 値はマウス ボタンを表します(左ボタン = 0、中ボタン = 1、右ボタン = 2)。keyCode は、押されたキーの未修正の 10 進数の ASCII 値を表します。keyModifier 値は、押された各キーの修飾子にビット単位で設定されます(Alt key = 0x08000000、Ctrl key = 0x04000000、Shift key = 0x02000000)。x と y は、マウスの位置をストリーム イメージ サイズを基準として相対的に表します。操作を行うたびに、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 コーデックのビットレート(通常は、2000 ~ 16000 の値)。 |
| quality | 数値 | JPEG エンコーダのイメージ品質。値の範囲は 1 (圧縮率が最大)から 100 (品質が最大)までです。 |