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

> Denne veiledningen hjelper deg med å sette opp streaming fra dweOS med GStreamer.

<Warning>
  dweOS støtter ikke offisielt streaming med GStreamer. Trinnene nedenfor er kun for Linux og Windows.

  MERK: Strømkvaliteten kan bli redusert som følge av dette.
</Warning>

<Danger>
  GStreamer kan være svært komplekst/omfattende, selv for å sette opp én videostrøm. Mange av kvalitetsfunksjonene som flere strømmer og direkteopptak er mye enklere og kommer med et brukergrensesnitt i [Discovery](https://dwe.ai/products/discovery)
</Danger>

<Steps>
  <Step title="Sjekk dweOS">
    Etter at du har fulgt dweOS-oppsettet, fortsett til neste trinn.

    <Note>
      Noter ned porten(e) det streames til.
    </Note>
  </Step>

  <Step title="Installer GStreamer">
    <Tabs>
      <Tab title="For Linux">
        I terminalen, kjør:

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

        Kjør deretter følgende for å installere 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="For Windows">
        <Steps>
          <Step title="Installer GStreamer">
            <Card title="Last ned GStreamer Framework" icon="stream" href="https://gstreamer.freedesktop.org/download/#windows">
              Klikk her for å laste ned GStreamer for skrivebord på din bærbare/stasjonære PC.

              <Note>
                Sørg for å laste ned MinGW-versjonen, og installer både runtime og development.
              </Note>
            </Card>

            <Tip>
              Når du er i tvil, installer 64-biters versjonen, siden denne er mer vanlig.
            </Tip>

            <Warning>
              GStreamer ville automatisk installere seg på D-stasjonen hvis du har mer enn én stasjon på PC-en. Du kan endre det til C-stasjonen når du gjør tilpasset installasjon.

              Hvis du installerer det på D-stasjonen, bare husk det når du setter opp miljøvariablene nedenfor.
            </Warning>
          </Step>

          <Step title="Konfigurer oppsett av miljøvariabler">
            <Steps>
              <Step>
                For å komme til miljøvariabler, trykk `Win + R`
              </Step>

              <Step>
                Skriv:

                ```
                SystemPropertiesAdvanced
                ```

                og trykk `Enter`
              </Step>

              <Step>
                Klikk `Miljøvariabler...`

                <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="Systemegenskaper-dialog" data-path="dwe-os/legacy/images/system-properties-dialog.png" />
              </Step>

              <Step>
                Marker variabelen `Path` under `Brukervariabler` ved å klikke på den og klikk deretter `Rediger…` under `Brukervariabler`-boksen.

                <img src="https://mintcdn.com/deepwaterexplorationinc/NrWVR9Qe6FWmBE6d/dwe-os/legacy/images/environment-variables-dialog.png?s=2d7ac09a6778fd1ceafd7a177335a9eb" width="80%" alt="Miljøvariabler-dialog" data-path="dwe-os/legacy/images/environment-variables-dialog.png" />
              </Step>

              <Step>
                Et nytt vindu skal dukke opp og du vil klikke på `Ny` og legge til en sti til bin-mappen din i listen. I dette tilfellet er det:

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

                Stien til bin-mappen din kan variere og kan finnes der du installerte GStreamer i forrige trinn.

                <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="Andre miljøvariabler-dialog" data-path="dwe-os/legacy/images/environment-variables-dialog-2.png" />
              </Step>

              <Step>
                Etter det, klikk `OK` på begge vinduene og du skal være klar til å gå!
              </Step>
            </Steps>
          </Step>

          <Step title="Suksess!">
            Du skal nå ha GStreamer satt opp og klar for neste trinn!
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    <Tip>
      For å verifisere GStreamer-oppsettet, åpne `CMD` og kjør følgende:

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

      Dette skal gi en utdata som:

      ```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="Identifiser variabler for GStreamer-kommandolinjen">
    For å koble sammen tilkoblede enheters videostrømmer, vil du først konfigurere dweOS.

    <Steps>
      <Step>
        Identifiser først IP-adressen til din bærbare/stasjonære PC, som vi skal legge inn i dweOS-programvaren.

        Dette kan gjøres ved å kjøre følgende:

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

        Du vil møte mange adresser, se gjennom dem, spesifikt adresser som følger teksten:
        `inet`.
        <Tip>Den vil mest sannsynlig være i formatet `192.168.x.xx`</Tip>
      </Step>

      <Step>
        Du vil erstatte den innsamlede IP-en i dweOS under IP-adresse, og noter porten du streamer til. (Standard 5600)

        <Tip>
          Husk å opprette streaming-endepunktet med `(+)`-knappen når feltene er fylt ut!
        </Tip>

        I dette eksemplet er den innsamlede IP-en 192.168.5.55, og porten er 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-endepunkter" data-path="dwe-os/legacy/images/dwe-os-endpoints.png" />

        <Note>
          At Port-feltet er satt til 5601 er automatisk med programmet, det eneste endepunktet det streames til har kameraikonet ved siden av seg og en søppelbøtte-knapp for å slette dem.
        </Note>
      </Step>

      <Step>
        Formatet til GStreamer er som følger:

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

        <Callout icon="key" color="#FFC107" iconType="regular">
          Med porten i tankene, er det noen parametere for GStreamer-kommandoen du bør være klar over.

          **Viktige flagg**:

          * `-v`(Verbose): Skriver ut strøminformasjon slik at du kan se hvilken oppløsning/format som forhandles mellom elementene.
          * `-e`(EOS - End of Stream): Avgjørende for opptak. Hvis du trykker Ctrl+C uten dette flagget, kan filen din bli ødelagt (manglende headere). Dette flagget tvinger en ren nedstenging.
          * `--help-all`: Lister opp hvert eneste element som er tilgjengelig på systemet ditt.

          **Kilder (inndata)**:

          * `videotestsrc`: Genererer et testmønster (fargestolper, statisk, osv.).

          * *Param*: `pattern=smpte` (eller `snow`, `ball`, osv.)

          * `autovideosrc` / `v4l2src`: Webkameraet ditt (Linux).

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

          * `filesrc`: Leser en lokal fil.

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

          * `udpsrc`: Mottar data over nettverket via UDP.
            * *Param*: `port=5600` (Porten å lytte på).
            * *Param*: `caps="..."` (Essensielt! Forteller GStreamer hva de rå bytene faktisk er).
            * *Param*: `buffer-size=524288` (Øker bufferen for å forhindre pakketap på høyoppløselige strømmer).
              * Standard bufferstørrelser for H264 er `96` og MJPEG er `26`

          **Sluk (utdata)**

          * `autovideosink`: Åpner et vindu og spiller av videoen.

          * `fakesink`: Forkaster data (nyttig for å teste om en pipeline kjører uten feil).

          * `filesink`: Skriver til en fil.

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

          * `udpsink`: Streamer over nettverket.

          **Essensielle (filtre/konvertere)**

          * `videoconvert`: Konverterer fargerom (f.eks. fra YUV til RGB). Hvis du får en "could not link"-feil, kast denne inn i midten.

          * `videoscale`: Endrer størrelsen på video.

          * `capsfilter`: Tvinger et spesifikt format. Syntaks: `video/x-raw,width=1920,height=1080`.

          * `rtp[format]depay`: Depayloader. Pakker ut RTP-nettverkspakker for å avsløre strømmen inni.
            * *Eksempler*: `rtpjpegdepay` (for MJPEG), `rtph264depay` (for H.264).

          * `[format]dec`: Dekoder. Dekomprimerer video til rå piksler for visning.
            * *Eksempler*: `jpegdec`, `avdec_h264`.
        </Callout>
      </Step>

      <Step>
        Her er et par eksempellinjer for å teste GStreamer:

        **Testmønster**

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

        **Visning av webkamera (hvis tilgjengelig)**

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

        **Webkamera tvunget 720p 30fps**

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

        <Note>
          For høyere oppløsninger er videoutdataene vanligvis komprimert MJPEG.

          `image/jpeg` aksepterer det komprimerte formatet fra kameraet.

          `jpegdec` legger til en dekoder for å gjøre JPEG-strømmen tilbake til rå video slik at vinduet kan vise den.
        </Note>

        **Ta opp webkamera**

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

        <Note>
          Dette vil ta opp i bakgrunnen. For å avslutte klippet, trykk `Ctrl + C`, og det vil ligge i gjeldende katalog.

          I dette tilfellet heter filen `test.mp4`, som vi kan sjekke eksistensen til med `ls -lh test.mp4`
        </Note>
      </Step>
    </Steps>
  </Step>

  <Step title="Sette opp streaming fra dweOS">
    Med en forståelse av GStreamer-kommandoer, kan vi begynne å sette opp videostrømmen spesifikt med dweOS.

    <Warning>
      Husk å sette din egen IP som IP-en i streaming-endepunktet!
    </Warning>

    Avhengig av videokodeken (MJPEC / H264) spesifisert i dweOS, kjør en av følgende:

    **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>
      Husk å erstatte portnummeret i kommandolinjen med porten det streames til!
    </Warning>

    Du skal nå ha en direktestrøm fra kameraet ditt i et vindu!
  </Step>

  <Step title="Sette opp opptak">
    For å ta opp en strøm spiller videokodeken igjen en rolle!

    Du vet at en strøm blir tatt opp hvis terminalen din inneholder tekst som ligner på dette:

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

    **MJPEG**

    For 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>
      Linjen over er for MKV-format, da AVI er utrolig finurlig med GStreamer og krever at utdataene formateres svært spesifikt. Selv om det er mulig, er MJPEG til AVI mye enklere i [Discovery](https://dwe.ai/products/discovery), siden det er standardutdata.
    </Note>

    **H264**

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

    For 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="Suksess!">
    Fantastisk! Du skal nå ha byggesteinene for å sette opp en strøm og opptak med GStreamer!
  </Step>
</Steps>

<Warning>
  Advarsel:

  Med GStreamer krever allerede et oppsett med ett enkelt kamera ganske mye arbeid,
  og opptak av flere strømmer samtidig vil også kreve ganske mye arbeid
  og utvikling.

  Vi anbefaler [Discovery](https://dwe.ai/products/discovery) hvis kameraoppsettene dine blir komplekse.
</Warning>

<Card title="Last ned Discovery" icon="video" href="https://dwe.ai/products/discovery">
  Den alt-i-ett-multimedialøsningen for undervannsvideostrømmer over nettverk.
</Card>
