> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dwe.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# dweOS から GStreamer へ

> このガイドでは、dweOS から GStreamer へのストリーミングをセットアップする方法を説明します。

<Warning>
  dweOS は GStreamer によるストリーミングを公式にはサポートしていません。以下の手順は Linux と Windows のみが対象です。

  注: ストリーム品質が低下する可能性があります。
</Warning>

<Danger>
  GStreamer は、1 本の動画ストリームを設定するだけでも非常に複雑/手間がかかる場合があります。複数ストリームやライブ録画などの便利機能は、ユーザーインターフェイス付きで [Discovery](https://dwe.ai/products/discovery) を使うとずっと簡単です。
</Danger>

<Steps>
  <Step title="dweOS を確認する">
    dweOS のセットアップが完了したら、次のステップに進みます。

    <Note>
      ストリーミング先のポートを控えておいてください。
    </Note>
  </Step>

  <Step title="GStreamer をインストールする">
    <Tabs>
      <Tab title="Linux 向け">
        ターミナル内で次を実行します:

        ```sh theme={null}
        sudo apt update
        ```

        次のコマンドを実行して GStreamer をインストールします:

        ```sh theme={null}
        sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools                
        ```
      </Tab>

      <Tab title="Windows 向け">
        <Steps>
          <Step title="GStreamer をインストールする">
            <Card title="GStreamer フレームワークをダウンロード" icon="stream" href="https://gstreamer.freedesktop.org/download/#windows">
              ノートパソコン/PC 用のデスクトップ版 GStreamer をダウンロードするにはこちらをクリックしてください。

              <Note>
                必ず MinGW 版をダウンロードし、runtime と development の両方をインストールしてください。
              </Note>
            </Card>

            <Tip>
              迷ったときは、より一般的な 64 ビット版をインストールしてください。
            </Tip>

            <Warning>
              PC に複数のドライブがある場合、GStreamer は自動的に D ドライブにインストールされます。カスタムインストールで C ドライブに変更できます。

              D ドライブにインストールした場合は、後で環境変数を設定するときにその点に注意してください。
            </Warning>
          </Step>

          <Step title="環境変数のセットアップ">
            <Steps>
              <Step>
                環境変数を開くには、`Win + R` を押します。
              </Step>

              <Step>
                次のように入力します:

                ```
                SystemPropertiesAdvanced
                ```

                `Enter` を押します。
              </Step>

              <Step>
                `環境変数...` をクリックします。

                <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/system-properties-dialog.png?fit=max&auto=format&n=NrWVR9Qe6FWmBE6d&q=85&s=e43b7911ce525ec2b854c971afa1266b" width="80%" alt="システムのプロパティダイアログ" data-path="dwe-os/legacy/images/system-properties-dialog.png" />
              </Step>

              <Step>
                `ユーザー環境変数` の `Path` 変数をクリックして強調表示し、`ユーザー環境変数` ボックスの下にある `編集...` をクリックします。

                <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/environment-variables-dialog.png?s=2d7ac09a6778fd1ceafd7a177335a9eb" width="80%" alt="環境変数ダイアログ" data-path="dwe-os/legacy/images/environment-variables-dialog.png" />
              </Step>

              <Step>
                新しいウィンドウが開くので、`新規` をクリックして、bin フォルダへのパスをリストに追加します。この例では次のパスです:

                ```
                C:\gstreamer\1.0\mingw_x86_64\bin
                ```

                bin へのパスは異なる場合があります。前の手順で GStreamer をインストールした場所から確認できます。

                <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/environment-variables-dialog-2.png?fit=max&auto=format&n=NrWVR9Qe6FWmBE6d&q=85&s=84f2d6d273839b4a87e6f3346a66014b" width="80%" alt="2 番目の環境変数ダイアログ" data-path="dwe-os/legacy/images/environment-variables-dialog-2.png" />
              </Step>

              <Step>
                その後、両方のウィンドウで `OK` をクリックすれば準備完了です!
              </Step>
            </Steps>
          </Step>

          <Step title="完了!">
            これで GStreamer のセットアップが完了し、次のステップに進む準備ができました!
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    <Tip>
      GStreamer のセットアップを確認するには、`CMD` を開いて次を実行します:

      ```sh theme={null}
      gst-launch-1.0 --version
      ```

      次のような出力が得られるはずです:

      ```sh theme={null}
      gst-launch-1.0 version 1.16.2
      GStreamer 1.16.2
      https://launchpad.net/distros/ubuntu/+source/gstreamer1.0
      ```
    </Tip>
  </Step>

  <Step title="GStreamer コマンドラインの変数を特定する">
    接続されているデバイスの動画ストリームを連携させるため、まず dweOS を構成します。

    <Steps>
      <Step>
        まず、ノートパソコン/デスクトップの IP アドレスを特定します。これを dweOS ソフトウェアに入力します。

        次のコマンドを実行することで確認できます:

        ```sh theme={null}
        ip addr
        ```

        多数のアドレスが表示されますが、特に `inet` というテキストの後に続くアドレスを確認します。
        <Tip>多くの場合 `192.168.x.xx` の形式になります。</Tip>
      </Step>

      <Step>
        取得した IP を dweOS の IP アドレス欄に入力し、ストリーミング先のポートを控えておきます(デフォルト 5600)。

        <Tip>
          フィールドを入力したら、`(+)` ボタンでストリーミングエンドポイントを作成することを忘れないでください!
        </Tip>

        この例では、取得した IP は 192.168.5.55、ポートは 5600 です。

        <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/dwe-os-endpoints.png?fit=max&auto=format&n=NrWVR9Qe6FWmBE6d&q=85&s=eb7d2af6898b5fc125bae20ac92889e0" width="80%" alt="dweOS エンドポイント" data-path="dwe-os/legacy/images/dwe-os-endpoints.png" />

        <Note>
          ポートフィールドの 5601 はプログラムによる自動表示で、実際にストリーミングされているエンドポイントには、カメラアイコンと削除用のごみ箱ボタンが付いています。
        </Note>
      </Step>

      <Step>
        GStreamer の形式は次のとおりです:

        ```sh theme={null}
        gst-launch-1.0 [FLAGS] [SOURCE] ! [FILTER] ! [SINK]
        ```

        <Callout icon="key" color="#FFC107" iconType="regular">
          ポートを念頭に置いた上で、GStreamer コマンドにはいくつかの注意すべきパラメータがあります。

          **重要なフラグ**:

          * `-v`(Verbose): ストリーム情報を出力し、エレメント間でネゴシエートされている解像度・フォーマットを確認できます。
          * `-e`(EOS - End of Stream): 録画にとって非常に重要です。このフラグなしで Ctrl+C を押すと、ファイルが破損(ヘッダ欠落)する可能性があります。このフラグはクリーンなシャットダウンを強制します。
          * `--help-all`: システムで利用可能なすべてのエレメントを一覧表示します。

          **ソース(入力)**:

          * `videotestsrc`: テストパターン(カラーバー、ノイズなど)を生成します。

          * *パラメータ*: `pattern=smpte`(または `snow`、`ball` など)

          * `autovideosrc` / `v4l2src`: Webcam(Linux)。

          * *パラメータ*: `device=/dev/video0`

          * `filesrc`: ローカルファイルを読み取ります。

          * *パラメータ*: `location=./video.mp4`

          * `udpsrc`: ネットワーク経由で UDP データを受信します。
            * *パラメータ*: `port=5600`(受信ポート)。
            * *パラメータ*: `caps="..."`(必須! 生のバイト列が実際に何であるかを GStreamer に伝えます)。
            * *パラメータ*: `buffer-size=524288`(高解像度ストリームでのパケットロスを防ぐためにバッファを増やします)。
              * 標準のバッファサイズは、H264 は `96`、MJPEG は `26` です。

          **シンク(出力)**

          * `autovideosink`: ウィンドウを開いて動画を再生します。

          * `fakesink`: データを破棄します(パイプラインがエラーなく動くかテストするのに有用)。

          * `filesink`: ファイルに書き出します。

          * *パラメータ*: `location=output.mp4`

          * `udpsink`: ネットワーク経由でストリーミングします。

          **必須(フィルタ/コンバータ)**

          * `videoconvert`: 色空間(例: YUV から RGB)を変換します。「could not link」エラーが出たら、これを途中に挟みます。

          * `videoscale`: 動画をリサイズします。

          * `capsfilter`: 特定のフォーマットを強制します。構文: `video/x-raw,width=1920,height=1080`

          * `rtp[format]depay`: デペイローダ。RTP ネットワークパケットを解いて、中のストリームを取り出します。
            * *例*: `rtpjpegdepay`(MJPEG 用)、`rtph264depay`(H.264 用)。

          * `[format]dec`: デコーダ。圧縮された動画を表示用の生ピクセルに展開します。
            * *例*: `jpegdec`、`avdec_h264`。
        </Callout>
      </Step>

      <Step>
        GStreamer を試すためのコマンド例をいくつか紹介します:

        **テストパターン**

        ```sh theme={null}
        gst-launch-1.0 -v videotestsrc ! videoconvert ! autovideosink
        ```

        **Webcam の表示(利用可能な場合)**

        ```sh theme={null}
        gst-launch-1.0 -v v4l2src ! videoconvert ! autovideosink
        ```

        **Webcam を 720p 30fps で強制する**

        ```sh theme={null}
        gst-launch-1.0 -v v4l2src ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegdec ! videoconvert ! autovideosink
        ```

        <Note>
          高解像度では、動画出力は通常 MJPEG で圧縮されています。

          `image/jpeg` はカメラからの圧縮フォーマットを受け入れます。

          `jpegdec` はデコーダを追加して、JPEG ストリームを生の動画に戻し、ウィンドウで表示できるようにします。
        </Note>

        **Webcam を録画する**

        ```sh theme={null}
        gst-launch-1.0 -e v4l2src ! videoconvert ! x264enc ! mp4mux ! filesink location=test.mp4
        ```

        <Note>
          これはバックグラウンドで録画します。クリップを終了するには `Ctrl + C` を押すと、現在のディレクトリにファイルが保存されます。

          この場合、ファイル名は `test.mp4` で、`ls -lh test.mp4` で存在を確認できます。
        </Note>
      </Step>
    </Steps>
  </Step>

  <Step title="dweOS からのストリーミングをセットアップする">
    GStreamer コマンドを理解した上で、dweOS 専用の動画ストリームをセットアップしていきます。

    <Warning>
      ストリーミングエンドポイントの IP には、必ず自身の IP を設定することを忘れないでください!
    </Warning>

    dweOS で指定したビデオコーデック(MJPEG / H264)に応じて、以下のいずれかを実行します:

    **MJPEG**

    ```sh theme={null}
    gst-launch-1.0 udpsrc port=5600 caps="application/x-rtp, encoding-name=JPEG, payload=26" ! rtpjpegdepay ! jpegdec ! autovideosink
    ```

    **H264**

    ```sh theme={null}
    gst-launch-1.0 udpsrc port=5600 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! avdec_h264 ! autovideosink
    ```

    <Warning>
      コマンドラインのポート番号は、必ずストリーミング先のポートに置き換えてください!
    </Warning>

    これでカメラからのライブストリームがウィンドウに表示されているはずです!
  </Step>

  <Step title="録画をセットアップする">
    ストリームを録画するには、改めてビデオコーデックが重要になります!

    ターミナルに次のようなテキストが表示されていれば、ストリームが録画されていることがわかります:

    <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/gstreamer-recording.png?fit=max&auto=format&n=NrWVR9Qe6FWmBE6d&q=85&s=dc17f9d3c1c2346810c18865c8b8d007" width="80%" alt="GStreamer 録画" data-path="dwe-os/legacy/images/gstreamer-recording.png" />

    **MJPEG**

    MKV の場合

    ```sh theme={null}
    gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, encoding-name=JPEG, payload=26" ! rtpjpegdepay ! jpegparse ! matroskamux ! filesink location=output_mjpeg.mkv
    ```

    <Note>
      上の行は MKV 形式用です。AVI は GStreamer では非常に扱いにくく、出力データを非常に厳密に整形する必要があるためです。可能ではありますが、MJPEG から AVI への変換はデフォルト出力である [Discovery](https://dwe.ai/products/discovery) を使うほうがずっと簡単です。
    </Note>

    **H264**

    MKV の場合

    ```sh theme={null}
    gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! h264parse ! matroskamux ! filesink location=output_h264.mkv
    ```

    MP4 の場合

    ```sh theme={null}
    gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! h264parse ! video/x-h264,stream-format=avc ! mp4mux ! filesink location=video.mp4
    ```
  </Step>

  <Step title="完了!">
    おめでとうございます! これで GStreamer によるストリームと録画を構築するためのビルディングブロックがそろいました!
  </Step>
</Steps>

<Warning>
  警告:

  GStreamer では、1 台のカメラ構成でもかなりの作業量が必要で、複数のストリームを同時に録画するのもかなりの作業と開発を要します。

  カメラ構成が複雑になる場合は [Discovery](https://dwe.ai/products/discovery) の利用をお勧めします。
</Warning>

<Card title="Discovery をダウンロード" icon="video" href="https://dwe.ai/products/discovery">
  サブシーネットワーク動画ストリーム向けのオールインワンマルチメディアソリューション。
</Card>
