> ## 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 vers GStreamer

> Ce guide vous aide à configurer le streaming depuis dweOS avec GStreamer.

<Warning>
  dweOS ne prend pas officiellement en charge le streaming avec GStreamer. Les étapes suivantes ne s'appliquent qu'à Linux et Windows.

  REMARQUE : la qualité du flux peut en pâtir.
</Warning>

<Danger>
  GStreamer peut être très complexe/élaboré, même pour configurer un seul flux vidéo. La plupart des fonctionnalités de confort comme les flux multiples et les enregistrements en direct sont beaucoup plus simples et disposent d'une interface utilisateur dans [Discovery](https://dwe.ai/products/discovery).
</Danger>

<Steps>
  <Step title="Vérifier dweOS">
    Après avoir suivi la configuration de dweOS, passez aux étapes suivantes.

    <Note>
      Notez le(s) port(s) vers lesquels la diffusion est effectuée.
    </Note>
  </Step>

  <Step title="Installer GStreamer">
    <Tabs>
      <Tab title="Pour Linux">
        Dans le terminal, exécutez :

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

        Puis exécutez la commande suivante pour installer 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="Pour Windows">
        <Steps>
          <Step title="Installer GStreamer">
            <Card title="Télécharger le framework GStreamer" icon="stream" href="https://gstreamer.freedesktop.org/download/#windows">
              Cliquez ici pour télécharger GStreamer pour ordinateur de bureau sur votre portable/PC.

              <Note>
                Assurez-vous de télécharger la version MinGW, et installez à la fois le runtime et le développement.
              </Note>
            </Card>

            <Tip>
              Dans le doute, installez la version 64 bits, car c'est la plus courante.
            </Tip>

            <Warning>
              GStreamer s'installerait automatiquement sur le lecteur D si vous avez plus d'un lecteur sur votre PC. Vous pouvez le changer vers le lecteur C en effectuant une installation personnalisée.

              Si vous l'installez sur le lecteur D, gardez-le simplement à l'esprit lorsque vous configurez vos variables d'environnement ci-dessous.
            </Warning>
          </Step>

          <Step title="Configurer les variables d'environnement">
            <Steps>
              <Step>
                Pour accéder aux variables d'environnement, appuyez sur `Win + R`
              </Step>

              <Step>
                Tapez :

                ```
                SystemPropertiesAdvanced
                ```

                et appuyez sur `Entrée`
              </Step>

              <Step>
                Cliquez sur `Variables d'environnement...`

                <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="Boîte de dialogue Propriétés système" data-path="dwe-os/legacy/images/system-properties-dialog.png" />
              </Step>

              <Step>
                Mettez en surbrillance la variable `Path` sous `Variables utilisateur` en cliquant dessus, puis cliquez sur `Modifier…` sous la zone `Variables utilisateur`.

                <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/environment-variables-dialog.png?s=2d7ac09a6778fd1ceafd7a177335a9eb" width="80%" alt="Boîte de dialogue Variables d'environnement" data-path="dwe-os/legacy/images/environment-variables-dialog.png" />
              </Step>

              <Step>
                Une nouvelle fenêtre devrait apparaître et vous devez cliquer sur `Nouveau` et ajouter un chemin vers votre dossier bin à la liste. Dans ce cas, c'est :

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

                Le chemin de votre bin peut varier et se trouve à l'emplacement où vous avez installé GStreamer dans les étapes précédentes.

                <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="Deuxième boîte de dialogue Variables d'environnement" data-path="dwe-os/legacy/images/environment-variables-dialog-2.png" />
              </Step>

              <Step>
                Ensuite, cliquez sur `OK` dans les deux fenêtres et tout devrait être prêt !
              </Step>
            </Steps>
          </Step>

          <Step title="Succès !">
            Vous devriez maintenant avoir GStreamer configuré et prêt pour les étapes suivantes !
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    <Tip>
      Pour vérifier l'installation de GStreamer, ouvrez `CMD` et exécutez :

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

      Cela devrait afficher quelque chose comme :

      ```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="Identifier les variables pour la ligne de commande GStreamer">
    Afin de relier les flux vidéo des appareils connectés, vous allez d'abord configurer dweOS.

    <Steps>
      <Step>
        Identifiez d'abord l'adresse IP de votre portable/bureau, que nous renseignerons dans le logiciel dweOS.

        Cela peut être fait en exécutant :

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

        Vous serez confronté à de nombreuses adresses, parcourez-les, en particulier les adresses suivant le texte :
        `inet`.
        <Tip>Elle sera très probablement au format `192.168.x.xx`</Tip>
      </Step>

      <Step>
        Vous devrez remplacer l'IP collectée dans dweOS sous Adresse IP, et noter le port vers lequel vous diffusez. (5600 par défaut)

        <Tip>
          N'oubliez pas de créer le point de terminaison de streaming avec le bouton `(+)` une fois les champs remplis !
        </Tip>

        Dans cet exemple, l'IP collectée est 192.168.5.55, et le port est 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="Points de terminaison dweOS" data-path="dwe-os/legacy/images/dwe-os-endpoints.png" />

        <Note>
          Le champ Port défini sur 5601 est automatique avec le programme, le seul point de terminaison vers lequel la diffusion est effectuée comporte l'icône de caméra à côté et un bouton corbeille pour le supprimer.
        </Note>
      </Step>

      <Step>
        Le format de GStreamer est le suivant :

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

        <Callout icon="key" color="#FFC107" iconType="regular">
          En tenant compte du port, il existe quelques paramètres de la commande GStreamer à connaître.

          **Drapeaux essentiels** :

          * `-v` (Verbose) : affiche les informations du flux pour que vous puissiez voir la résolution/le format négocié entre les éléments.
          * `-e` (EOS - End of Stream) : crucial pour l'enregistrement. Si vous appuyez sur Ctrl+C sans ce drapeau, votre fichier peut être corrompu (en-têtes manquants). Ce drapeau force un arrêt propre.
          * `--help-all` : liste tous les éléments disponibles sur votre système.

          **Sources (entrée)** :

          * `videotestsrc` : génère un motif de test (barres de couleur, statique, etc.).

          * *Paramètre* : `pattern=smpte` (ou `snow`, `ball`, etc.)

          * `autovideosrc` / `v4l2src` : votre webcam (Linux).

          * *Paramètre* : `device=/dev/video0`

          * `filesrc` : lit un fichier local.

          * *Paramètre* : `location=./video.mp4`

          * `udpsrc` : reçoit des données sur le réseau via UDP.
            * *Paramètre* : `port=5600` (le port d'écoute).
            * *Paramètre* : `caps="..."` (Essentiel ! Indique à GStreamer ce que sont réellement les octets bruts).
            * *Paramètre* : `buffer-size=524288` (augmente le tampon pour éviter la perte de paquets sur les flux haute résolution).
              * Les tailles de tampon standard pour H264 sont `96` et pour MJPEG `26`

          **Sinks (sortie)**

          * `autovideosink` : ouvre une fenêtre et lit la vidéo.

          * `fakesink` : ignore les données (utile pour tester si un pipeline s'exécute sans erreurs).

          * `filesink` : écrit dans un fichier.

          * *Paramètre* : `location=output.mp4`

          * `udpsink` : diffuse sur le réseau.

          **Essentiels (filtres/convertisseurs)**

          * `videoconvert` : convertit les espaces colorimétriques (par exemple, de YUV à RGB). Si vous obtenez une erreur « could not link », mettez-le au milieu.

          * `videoscale` : redimensionne la vidéo.

          * `capsfilter` : force un format spécifique. Syntaxe : `video/x-raw,width=1920,height=1080`.

          * `rtp[format]depay` : dépaquetage. Déballe les paquets réseau RTP pour révéler le flux à l'intérieur.
            * *Exemples* : `rtpjpegdepay` (pour MJPEG), `rtph264depay` (pour H.264).

          * `[format]dec` : décodeur. Décompresse la vidéo en pixels bruts pour l'affichage.
            * *Exemples* : `jpegdec`, `avdec_h264`.
        </Callout>
      </Step>

      <Step>
        Voici quelques lignes d'exemple pour tester votre GStreamer :

        **Motif de test**

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

        **Affichage webcam (si disponible)**

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

        **Forcer webcam en 720p 30 ips**

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

        <Note>
          Pour des résolutions supérieures, la sortie vidéo est généralement en MJPEG compressé.

          `image/jpeg` accepte le format compressé provenant de la caméra.

          `jpegdec` ajoute un décodeur pour transformer ce flux JPEG en vidéo brute afin que la fenêtre puisse l'afficher.
        </Note>

        **Enregistrer la webcam**

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

        <Note>
          Cela enregistrera en arrière-plan. Pour terminer le clip, appuyez sur `Ctrl + C`, et il sera dans le répertoire courant.

          Dans ce cas, le fichier s'appelle `test.mp4`, dont nous pouvons vérifier l'existence avec `ls -lh test.mp4`.
        </Note>
      </Step>
    </Steps>
  </Step>

  <Step title="Configurer le streaming depuis dweOS">
    Avec une compréhension des commandes GStreamer, nous pouvons commencer à configurer le flux vidéo spécifiquement avec dweOS.

    <Warning>
      N'oubliez pas de définir votre propre IP comme IP dans le point de terminaison de streaming !
    </Warning>

    Selon le codec vidéo (MJPEG / H264) spécifié dans dweOS, exécutez l'une des commandes suivantes :

    **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>
      N'oubliez pas de remplacer le numéro de port dans la ligne de commande par le port vers lequel la diffusion est effectuée !
    </Warning>

    Vous devriez maintenant avoir un flux en direct depuis votre caméra dans une fenêtre !
  </Step>

  <Step title="Configurer l'enregistrement">
    Pour enregistrer un flux, le codec vidéo est à nouveau important !

    Vous saurez qu'un flux est en cours d'enregistrement si votre terminal contient un texte similaire à celui-ci :

    <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="Enregistrement GStreamer" data-path="dwe-os/legacy/images/gstreamer-recording.png" />

    **MJPEG**

    Pour 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>
      La ligne ci-dessus est pour un format MKV, car l'AVI est extrêmement capricieux avec GStreamer et nécessite un formatage très spécifique des données de sortie. Bien que possible, MJPEG vers AVI est beaucoup plus simple dans [Discovery](https://dwe.ai/products/discovery), car c'est la sortie par défaut.
    </Note>

    **H264**

    Pour 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
    ```

    Pour 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="Succès !">
    Magnifique ! Vous devriez maintenant disposer des éléments de base pour configurer un flux et un enregistrement avec GStreamer !
  </Step>
</Steps>

<Warning>
  Avertissement :

  Avec GStreamer, une configuration d'une seule caméra demande déjà pas mal de travail,
  et l'enregistrement simultané de plusieurs flux nécessiterait également beaucoup de travail
  et de développement.

  Nous recommandons [Discovery](https://dwe.ai/products/discovery) si vos configurations de caméras deviennent complexes.
</Warning>

<Card title="Télécharger Discovery" icon="video" href="https://dwe.ai/products/discovery">
  La solution multimédia tout-en-un pour les flux vidéo réseau sous-marins.
</Card>
