Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter onvif camera v1.x.x

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

Test Adapter onvif camera v1.x.x

Geplant Angeheftet Gesperrt Verschoben Tester
341 Beiträge 48 Kommentatoren 94.8k Aufrufe 49 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T tombox

    Hi ich habe ein neuen Adapter für ONVIF Kameras geschrieben, da die bisherigen Adapter nicht mehr gewartet werden und ich kein snapshot bei meiner Kamera erhalten habe.

    Zum Installieren:
    https://github.com/iobroker-community-adapters/ioBroker.onvif

    Für die aktuelle Version bitte das latest Repo auswählen:

    2d049982-5353-4202-a33f-996f344bd4ae-image.png

    Kameras hinzufügen

    Discovery:

    Bei jedem Adapterstart wird mit dem in der Einstellungen eingetragen Benutzername und Passwort eine Discovery durchgeführt und versuch sich in die Kamera einzuloggen. Falls die Kamera noch nicht unter Objekte hinzugefügt wurde.

    In den Einstellungen kann man die Discovery manuell ausführen. Falls die Kameras unterschiedliche Zugangsdaten haben müssen die jeweils eingegeben werden und eine discovery durchgeführt werden. Im Log sieht man Details zu dem Prozess.

    Damit eine Kamera neu erkannt wird muss sie einfach unter Objekte gelöscht werden.

    Manuelle Suche

    Es können Kameras manuell gesucht werden, falls Discovery nicht funktioniert. Dazu muss eine IP Range und Ports eingegeben und manuell ausgeführt werden. Im Log sieht man Details zu dem Prozess.

    Datenpunkte

    onvif.0.IP_PORT.events Events der Kamera wie z.b. Bewegungserkennung

    onvif.0.IP_PORT.general Generelle Information über die Kameras

    onvif.0.IP_PORT.infos Informationen über die Kamera werden nur bei Adapterstart aktualisiert oder bei remote.refresh

    Video und Snapshot URL:
    onvif.0.IP_PORT.infos.streamUris.MediaProfile_Channel1_MainStream.snapshotUrl.uri

    onvif.0.IP_PORT.remote Steuerung der Kamera

    onvif.0.IP_PORT.remote.refresh Aktualisierung der Infodaten

    onvif.0.IP_PORT.remote.gotoHomePosition PTZ Kamera in die HomePosition setzen

    onvif.0.IP_PORT.remote.gotoPreset PTZ Kamera Preset Nummer auswählen

    onvif.0.IP_PORT.remote.snapshot Speichert ein snapshot unter onvif.0.IP_PORT.snapshot

    Message

    Adapter nimmt Message "snapshot" entgegen und gibt ein Bild zurück

    sendTo("onvif.0", "snapshot", "192_168_178_100_80", (result) => {
      if (result) {
        sendTo("telegram.0", {
          text: result,
          type: "photo",
          caption: "Kamera 2",
        });
      }
    });
    

    Bewegungsmeldung zu Telegram

    on("onvif.0.192_168_178_100_80.events.RuleEngine/CellMotionDetector/Motion", (obj) => {
      if (obj.state.val === true) {
        sendTo("onvif.0", "snapshot", "192_168_178_100_80", (result) => {
          if (result) {
            sendTo("telegram.0", {
              text: result,
              type: "photo",
              caption: "Camera 2",
            });
          }
        });
      }
    });
    

    Snapshot Server in vis einbinden

    Der Adapter bietet ein Snapshot Server ohne Passwort an. Dazu Server aktivieren in den Instanzeinstellungen und dann kann der aktuelle Snapshot http://iobrokerIp:8095/CAMERAIP_PORT z.B. http://192.168.0.1:8095/192_168_0_1_80 abgerufen werden.

    In der Vis ein Image Widget einfügen und die Url als Quelle angeben und eine Updatezeit auswählen

    c59c6c74-01c1-4472-84c9-cc477d49a75c-image.png

    Stream in vis einbinden

    go2rtsp Docker

    Ein Stream wird normalerweise via rtsp stream bereitgestellt. Eine Umwandlung via motion eye ist sehr resourcen aufwändig und hat ein Verzögerng. Ein Umwandlung in webrtc ist schneller und resourcenschonender. Meine Empfehlung ist ein go2rtsp. Dazu muss ein Docker von alexxit/go2rtc erstellt werden.
    https://hub.docker.com/r/alexxit/go2rtc

    Oder go2rtc lokal zu installieren:
    https://www.youtube.com/watch?v=4VEEpRYerZg
    https://forum.iobroker.net/post/1031526

     image: alexxit/go2rtc
        network_mode: host       # important for WebRTC, HomeKit, UDP cameras
        privileged: true         # only for FFmpeg hardware transcoding
        restart: unless-stopped  # autorestart on fail or config change from WebUI
        environment:
          - TZ=Europe/Berlin  # timezone in logs
        volumes:
          - "~/go2rtc:/config"   # folder for go2rtc.yaml file (edit from WebUI)
    

    Es muss ein Volume für den Pfad /config und das network als host eingestellt werden.

    Dann ist go2rtsp erreichbar über

    http://IP:1984
    

    Dann kann man ein Stream hinzufügen. Die Stream url findet man z.B. unter
    onvif.0.IP_PORT.infos.streamUris.ProfileName.live_stream_tcp.uri

    6c837e18-5f5d-4b92-94df-b752208f139b-image.png

    Stream als iFrame einfügen

    Das Widget iFrame in der Vis hinzufügen und als Quelle den stream link von go2rtsp verwenden

    http://192.168.178.1:1984/stream.html?src=camera&mode=webrtc

    Unter links kann noch die Art des Players ausgewählt werden (Mikrofon)

    Rtsp2Web Docker

    Eine Alternative ist ein RTSPtoWeb Docker. Dies ist aber von der Einrichtun komplizierter.
    Dazu muss ein Docker von ghcr.io/deepch/rtsptoweb:latest erstellt werden.

    docker run --name rtsp-to-web -v /YOURPATHFORCONFIG:/config --network host ghcr.io/deepch/rtsptoweb:latest
    

    Es muss ein Volume für den Pfad /config und das network als host eingestellt werden.

    Dann ist rtsptoweb erreichbar über

    http://IP:8083
    

    Dann kann man ein Stream hinzufügen. Die Stream url findet man z.B. unter
    onvif.0.IP_PORT.infos.streamUris.ProfileName.live_stream_tcp.uri

    <img src="addstream.png" height="600">

    Danach benötigen wir die Stream Id. Dafür Stream Edit und in der URL die Id rauskopieren

    http://192.168.178.2:8083/pages/stream/edit/ddbdb583-9f80-4b61-bafa-613aa7a5daa5

    Einzelnen Stream in der Vis einfügen

    Dann in der vis ein HTML Objekt auswählen. Dann im Widget unter HTML den rtsp2web server mit stream id eintragen:

    <img src="html.png" height="150">

    Wenn mehrere Stream hinzugefügt werden soll muss webrtc-url und webrtc-video in html und skript mit einer neuen id ersetzt werden z.B. webrtc-url2 und webrtc-video2

    <input
      type="hidden"
      name="webrtc-url"
      id="webrtc-url"
      value="http://192.168.0.2:8083/stream/ddbdb583-9f80-4b61-bafa-613aa7a5daa5/channel/0/webrtc"
    />
    
    <video id="webrtc-video" autoplay muted playsinline controls style="max-width: 100%; max-height: 100%;"></video>
    

    In dem Widget unter Skripte dieses Skript hinzufügen:

    setTimeout(function () {
      function startPlay(videoEl, url) {
        const webrtc = new RTCPeerConnection({
          iceServers: [
            {
              urls: ["stun:stun.l.google.com:19302"],
            },
          ],
          sdpSemantics: "unified-plan",
        });
        webrtc.ontrack = function (event) {
          console.log(event.streams.length + " track is delivered");
          videoEl.srcObject = event.streams[0];
          videoEl.play();
        };
        webrtc.addTransceiver("video", { direction: "sendrecv" });
        webrtc.onnegotiationneeded = async function handleNegotiationNeeded() {
          const offer = await webrtc.createOffer();
    
          await webrtc.setLocalDescription(offer);
    
          fetch(url, {
            method: "POST",
            body: new URLSearchParams({ data: btoa(webrtc.localDescription.sdp) }),
          })
            .then((response) => response.text())
            .then((data) => {
              try {
                webrtc.setRemoteDescription(new RTCSessionDescription({ type: "answer", sdp: atob(data) }));
              } catch (e) {
                console.warn(e);
              }
            });
        };
    
        const webrtcSendChannel = webrtc.createDataChannel("rtsptowebSendChannel");
        webrtcSendChannel.onopen = (event) => {
          console.log(`${webrtcSendChannel.label} has opened`);
          webrtcSendChannel.send("ping");
        };
        webrtcSendChannel.onclose = (_event) => {
          console.log(`${webrtcSendChannel.label} has closed`);
          startPlay(videoEl, url);
        };
        webrtcSendChannel.onmessage = (event) => console.log(event.data);
      }
    
      const videoEl = document.querySelector("#webrtc-video");
      const webrtcUrl = document.querySelector("#webrtc-url").value;
    
      startPlay(videoEl, webrtcUrl);
    }, 1000);
    

    <img src="widgetskript.png" height="200">

    Alle Streams als iFrame

    Alternativ könnte man auch den Kamera Overview als Iframe einfügen:
    Das Widget iFrame hinzufügen und als Quelle den rtsp2web Server eintragen:

    http://192.168.0.2:8083/pages/multiview/full?controls

    FFMpeg Unterstützung

    Wenn die Kamera keine Snapshot Unterstützng hat wird mit ffmpeg ein snapshot aus dem rtsp stream erzeugt.

    Snapshot Server in vis einbinden

    Der Adapter bietet ein Snapshot Server ohne Passwort an. Dazu Server aktivieren in den Instanzeinstellungen und dann kann der aktuelle Snapshot http://iobrokerIp:8095/CAMERAIP_PORT z.B. http://192.168.0.1:8095/192_168_0_1_80 abgerufen werden.

    In der Vis ein Image Widget einfügen und die Url als Quelle angeben und eine Updatezeit auswählen

    Snapshot in vis einbinden

    Wenn möglich die snapshotUri verwenden z.B.
    onvif.0.IP_PORT.infos.streamUris.MediaProfile_Channel1_MainStream.snapshotUrl.uri

    Den Datenpunkt nicht als Stream verwenden, da sonst die Festplatte zu hohe Last hat.

    Den Datenpunkt aktualisieren via t onvif.0.IP_PORT.remote.snapshot

    Den Datenpunkt onvif.0.IP_PORT.snapshot ein String img src element zuordnen
    8c6904b2-e6b0-4489-bf83-0aef733cd86a-image.png

    Oder als Alternative falls String img src nicht funktioniert
    Den Datenpunkt onvif.0.IP_PORT.snapshot als HTML element in die vis einfügen mit folgendem Inhalt

    <img src="{onvif.0.IP_PORT.snapshot}" width="500px" />
    

    e09e2094-73ce-40c4-b966-6be58108c6f3-image.pnghttps://forum.iobroker.net/assets/uploads/files/1679400558520-37e68385-d60b-495f-b443-09fe53242663-grafik.png

    wendy2702W Online
    wendy2702W Online
    wendy2702
    schrieb am zuletzt editiert von wendy2702
    #129

    @tombox sagte in Test Adapter onvif camera v1.0.0:

    Rtsp2Web Docker

    Hi,

    ich versuch das gerade umzusetzen. Habe aber das Problem das sobald ich ein zweites Widget für eine weitere Kamera einfüge beide kein Bild mehr anzeigen.

    Lösche ich das zweite Widget wieder funktioniert das andere wieder.

    Erstes Widget sieht so aus:

    49befe52-9543-44fc-9d3a-9c5de93cd61c-grafik.png

    Zweites dann so mit anderer Channel ID:
    46e7cdfb-1dd5-43fb-9236-24e6398b1ed7-grafik.png

    Script ist hinterlegt:

    34006b2d-776a-4003-9cc6-f67807d2c184-grafik.png

    Was mache ich denn falsch ?

    EDIT: Gibt es im Browser Beschränkungen was die Anzahl der Streams betrifft oder so?

    In Chrome sieht es so aus: der funktionierende ist der zuerst eingefügte Stream
    855fb27f-6f1c-4a3f-9208-c465e8e6e8dd-grafik.png

    In FF kommt das:
    8ecb6a6a-c7b5-44a7-bc18-fc0d8ae493e9-grafik.png

    Wenn ich den zweiten Stream auf einen anderen View mache funktioniert er:
    50d0780b-ca9f-4e7f-ba07-c2d40933b146-grafik.png

    Jemand eine Idee dazu ?

    Bitte keine Fragen per PN, die gehören ins Forum!

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    KnallochseK 1 Antwort Letzte Antwort
    0
    • Marc_el_KM Offline
      Marc_el_KM Offline
      Marc_el_K
      schrieb am zuletzt editiert von
      #130

      Hallo zusammen,

      ich habe den Fehler gefunden und bitte um Unterstützung:

      In der Kamera steht
      onvif.0.IP_PORT.infos.streamUris.Profile2.snapshotUrl.uri: http://IP:80/api/v1/snap.cgi?chn=0

      Sobald ich Port 80 mit dem hinterlegten Port ändere funktioniert der Link bei mir und ich kann über den Browser Screenshots abfragen.

      Den Pfad im DAtenpunkt zu überschreiben ist sicher keine gute Idee. Wie ist es denn behebar?

      R 1 Antwort Letzte Antwort
      0
      • Marc_el_KM Marc_el_K

        Hallo zusammen,

        ich habe den Fehler gefunden und bitte um Unterstützung:

        In der Kamera steht
        onvif.0.IP_PORT.infos.streamUris.Profile2.snapshotUrl.uri: http://IP:80/api/v1/snap.cgi?chn=0

        Sobald ich Port 80 mit dem hinterlegten Port ändere funktioniert der Link bei mir und ich kann über den Browser Screenshots abfragen.

        Den Pfad im DAtenpunkt zu überschreiben ist sicher keine gute Idee. Wie ist es denn behebar?

        R Offline
        R Offline
        Rookie50
        schrieb am zuletzt editiert von
        #131

        @marc_el_k in was änderst du :80? Der Datenpunkt wird von der Onvif Discovery zurück gemeldet. Es wird nicht bringen es dort händisch zu ändern...
        Schick doch mal die URL mit der Du Snapshots im Browser anzeigen lassen kannst.

        Marc_el_KM 1 Antwort Letzte Antwort
        0
        • R Rookie50

          @marc_el_k in was änderst du :80? Der Datenpunkt wird von der Onvif Discovery zurück gemeldet. Es wird nicht bringen es dort händisch zu ändern...
          Schick doch mal die URL mit der Du Snapshots im Browser anzeigen lassen kannst.

          Marc_el_KM Offline
          Marc_el_KM Offline
          Marc_el_K
          schrieb am zuletzt editiert von
          #132

          @rookie50 mit genau dieser Adresse, jedoch nicht mit der 80 sondern meinem hinterlegten Port, den ich in den Kameraeinstellungen hinterlegt habe.

          http://IP:MeinPort/api/v1/snap.cgi?chn=0

          R 1 Antwort Letzte Antwort
          0
          • Marc_el_KM Marc_el_K

            @rookie50 mit genau dieser Adresse, jedoch nicht mit der 80 sondern meinem hinterlegten Port, den ich in den Kameraeinstellungen hinterlegt habe.

            http://IP:MeinPort/api/v1/snap.cgi?chn=0

            R Offline
            R Offline
            Rookie50
            schrieb am zuletzt editiert von
            #133

            @marc_el_k hast Du ein Problem mit Port 80? Oder warum hast Du dort einen anderen? Stell doch in der Kamera den Port wieder auf 80 und teste es.

            Marc_el_KM 1 Antwort Letzte Antwort
            0
            • R Rookie50

              @marc_el_k hast Du ein Problem mit Port 80? Oder warum hast Du dort einen anderen? Stell doch in der Kamera den Port wieder auf 80 und teste es.

              Marc_el_KM Offline
              Marc_el_KM Offline
              Marc_el_K
              schrieb am zuletzt editiert von Marc_el_K
              #134

              @rookie50 in den Einstellungen der Kamera kann ich von 8000-9000 einen Port vergeben. Also probiere ich es Mal mit 8000

              Edit: Nein geht nicht. Im Datenpunkt steht wieder "80". Im Browser kein Bild. Ändere ich es ab auf 8000 geht es sofort

              R T 2 Antworten Letzte Antwort
              0
              • Marc_el_KM Marc_el_K

                @rookie50 in den Einstellungen der Kamera kann ich von 8000-9000 einen Port vergeben. Also probiere ich es Mal mit 8000

                Edit: Nein geht nicht. Im Datenpunkt steht wieder "80". Im Browser kein Bild. Ändere ich es ab auf 8000 geht es sofort

                R Offline
                R Offline
                Rookie50
                schrieb am zuletzt editiert von
                #135

                @marc_el_k ein Screenshot von den Porteinstellungen wäre hilfreich. Die Kameras haben meistens mehrere Ports für unterschiedliche Dienste

                1 Antwort Letzte Antwort
                0
                • wendy2702W wendy2702

                  @tombox sagte in Test Adapter onvif camera v1.0.0:

                  Rtsp2Web Docker

                  Hi,

                  ich versuch das gerade umzusetzen. Habe aber das Problem das sobald ich ein zweites Widget für eine weitere Kamera einfüge beide kein Bild mehr anzeigen.

                  Lösche ich das zweite Widget wieder funktioniert das andere wieder.

                  Erstes Widget sieht so aus:

                  49befe52-9543-44fc-9d3a-9c5de93cd61c-grafik.png

                  Zweites dann so mit anderer Channel ID:
                  46e7cdfb-1dd5-43fb-9236-24e6398b1ed7-grafik.png

                  Script ist hinterlegt:

                  34006b2d-776a-4003-9cc6-f67807d2c184-grafik.png

                  Was mache ich denn falsch ?

                  EDIT: Gibt es im Browser Beschränkungen was die Anzahl der Streams betrifft oder so?

                  In Chrome sieht es so aus: der funktionierende ist der zuerst eingefügte Stream
                  855fb27f-6f1c-4a3f-9208-c465e8e6e8dd-grafik.png

                  In FF kommt das:
                  8ecb6a6a-c7b5-44a7-bc18-fc0d8ae493e9-grafik.png

                  Wenn ich den zweiten Stream auf einen anderen View mache funktioniert er:
                  50d0780b-ca9f-4e7f-ba07-c2d40933b146-grafik.png

                  Jemand eine Idee dazu ?

                  KnallochseK Offline
                  KnallochseK Offline
                  Knallochse
                  schrieb am zuletzt editiert von
                  #136

                  @wendy2702 Bei mir auch so. Ab 2. Kamera geht die Anzeige nicht mehr

                  HM&HMIP über 100 Geräte + IoBroker auf DS918+ uvm.

                  wendy2702W 1 Antwort Letzte Antwort
                  0
                  • KnallochseK Knallochse

                    @wendy2702 Bei mir auch so. Ab 2. Kamera geht die Anzeige nicht mehr

                    wendy2702W Online
                    wendy2702W Online
                    wendy2702
                    schrieb am zuletzt editiert von wendy2702
                    #137

                    @knallochse Danke für die Info.

                    Vielleicht hat ja noch wer eine Lösung dazu oder sind wir die einzigen die mehr als eine Kamera in VIS haben ?

                    Bitte keine Fragen per PN, die gehören ins Forum!

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    T 1 Antwort Letzte Antwort
                    0
                    • wendy2702W wendy2702

                      @knallochse Danke für die Info.

                      Vielleicht hat ja noch wer eine Lösung dazu oder sind wir die einzigen die mehr als eine Kamera in VIS haben ?

                      T Offline
                      T Offline
                      tombox
                      schrieb am zuletzt editiert von
                      #138

                      @wendy2702 bitte für die zweite Kamera folgendes verwenden

                      <input
                        type="hidden"
                        name="webrtc2-url"
                        id="webrtc2-url"
                        value="http://192.168.0.2:8083/stream/ddbdb583-9f80-4b61-bafa-613aa7a5daa5/channel/0/webrtc"
                      />
                       
                      <video id="webrtc2-video" autoplay muted playsinline controls style="max-width: 100%; max-height: 100%;"></video>
                      
                      setTimeout(function () {
                        function startPlay(videoEl, url) {
                          const webrtc = new RTCPeerConnection({
                            iceServers: [
                              {
                                urls: ["stun:stun.l.google.com:19302"],
                              },
                            ],
                            sdpSemantics: "unified-plan",
                          });
                          webrtc.ontrack = function (event) {
                            console.log(event.streams.length + " track is delivered");
                            videoEl.srcObject = event.streams[0];
                            videoEl.play();
                          };
                          webrtc.addTransceiver("video", { direction: "sendrecv" });
                          webrtc.onnegotiationneeded = async function handleNegotiationNeeded() {
                            const offer = await webrtc.createOffer();
                       
                            await webrtc.setLocalDescription(offer);
                       
                            fetch(url, {
                              method: "POST",
                              body: new URLSearchParams({ data: btoa(webrtc.localDescription.sdp) }),
                            })
                              .then((response) => response.text())
                              .then((data) => {
                                try {
                                  webrtc.setRemoteDescription(new RTCSessionDescription({ type: "answer", sdp: atob(data) }));
                                } catch (e) {
                                  console.warn(e);
                                }
                              });
                          };
                       
                          const webrtcSendChannel = webrtc.createDataChannel("rtsptowebSendChannel");
                          webrtcSendChannel.onopen = (event) => {
                            console.log(`${webrtcSendChannel.label} has opened`);
                            webrtcSendChannel.send("ping");
                          };
                          webrtcSendChannel.onclose = (_event) => {
                            console.log(`${webrtcSendChannel.label} has closed`);
                            startPlay(videoEl, url);
                          };
                          webrtcSendChannel.onmessage = (event) => console.log(event.data);
                        }
                       
                        const videoEl = document.querySelector("#webrtc2-video");
                        const webrtcUrl = document.querySelector("#webrtc2-url").value;
                       
                        startPlay(videoEl, webrtcUrl);
                      }, 1000);
                      
                      wendy2702W 1 Antwort Letzte Antwort
                      1
                      • T tombox

                        @wendy2702 bitte für die zweite Kamera folgendes verwenden

                        <input
                          type="hidden"
                          name="webrtc2-url"
                          id="webrtc2-url"
                          value="http://192.168.0.2:8083/stream/ddbdb583-9f80-4b61-bafa-613aa7a5daa5/channel/0/webrtc"
                        />
                         
                        <video id="webrtc2-video" autoplay muted playsinline controls style="max-width: 100%; max-height: 100%;"></video>
                        
                        setTimeout(function () {
                          function startPlay(videoEl, url) {
                            const webrtc = new RTCPeerConnection({
                              iceServers: [
                                {
                                  urls: ["stun:stun.l.google.com:19302"],
                                },
                              ],
                              sdpSemantics: "unified-plan",
                            });
                            webrtc.ontrack = function (event) {
                              console.log(event.streams.length + " track is delivered");
                              videoEl.srcObject = event.streams[0];
                              videoEl.play();
                            };
                            webrtc.addTransceiver("video", { direction: "sendrecv" });
                            webrtc.onnegotiationneeded = async function handleNegotiationNeeded() {
                              const offer = await webrtc.createOffer();
                         
                              await webrtc.setLocalDescription(offer);
                         
                              fetch(url, {
                                method: "POST",
                                body: new URLSearchParams({ data: btoa(webrtc.localDescription.sdp) }),
                              })
                                .then((response) => response.text())
                                .then((data) => {
                                  try {
                                    webrtc.setRemoteDescription(new RTCSessionDescription({ type: "answer", sdp: atob(data) }));
                                  } catch (e) {
                                    console.warn(e);
                                  }
                                });
                            };
                         
                            const webrtcSendChannel = webrtc.createDataChannel("rtsptowebSendChannel");
                            webrtcSendChannel.onopen = (event) => {
                              console.log(`${webrtcSendChannel.label} has opened`);
                              webrtcSendChannel.send("ping");
                            };
                            webrtcSendChannel.onclose = (_event) => {
                              console.log(`${webrtcSendChannel.label} has closed`);
                              startPlay(videoEl, url);
                            };
                            webrtcSendChannel.onmessage = (event) => console.log(event.data);
                          }
                         
                          const videoEl = document.querySelector("#webrtc2-video");
                          const webrtcUrl = document.querySelector("#webrtc2-url").value;
                         
                          startPlay(videoEl, webrtcUrl);
                        }, 1000);
                        
                        wendy2702W Online
                        wendy2702W Online
                        wendy2702
                        schrieb am zuletzt editiert von
                        #139

                        @tombox So ähnlich habe ich das auch gerade hinbekommen.

                        Jetzt bisschen Off Topic aber kann man eigentlich jedem Widget einzeln unterschiedliche Skripte anhängen?

                        Ich habe das ja gerade für das erste Widget eingefügt und es ist dann ja auch direkt bei allen anderen sichtbar.

                        Bitte keine Fragen per PN, die gehören ins Forum!

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        T 1 Antwort Letzte Antwort
                        0
                        • wendy2702W wendy2702

                          @tombox So ähnlich habe ich das auch gerade hinbekommen.

                          Jetzt bisschen Off Topic aber kann man eigentlich jedem Widget einzeln unterschiedliche Skripte anhängen?

                          Ich habe das ja gerade für das erste Widget eingefügt und es ist dann ja auch direkt bei allen anderen sichtbar.

                          T Offline
                          T Offline
                          tombox
                          schrieb am zuletzt editiert von
                          #140

                          @wendy2702 Kenne mich da auch nicht so aus aber anscheinend.
                          Kannst du was zu der performance von rtsp2web sagen?

                          wendy2702W 1 Antwort Letzte Antwort
                          0
                          • T tombox

                            @wendy2702 Kenne mich da auch nicht so aus aber anscheinend.
                            Kannst du was zu der performance von rtsp2web sagen?

                            wendy2702W Online
                            wendy2702W Online
                            wendy2702
                            schrieb am zuletzt editiert von
                            #141

                            @tombox Bin gerade dabei VIS von Motioneye auf RTSP2WEB zu stellen. Dann mal auf Bewegung warten oder morgen selber generieren.

                            Fakt ist das die Prozessor Last im Vergleich zu Motioneye nichts ist.

                            Bitte keine Fragen per PN, die gehören ins Forum!

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            R 1 Antwort Letzte Antwort
                            0
                            • Marc_el_KM Marc_el_K

                              @rookie50 in den Einstellungen der Kamera kann ich von 8000-9000 einen Port vergeben. Also probiere ich es Mal mit 8000

                              Edit: Nein geht nicht. Im Datenpunkt steht wieder "80". Im Browser kein Bild. Ändere ich es ab auf 8000 geht es sofort

                              T Offline
                              T Offline
                              tombox
                              schrieb am zuletzt editiert von
                              #142

                              @marc_el_k Anscheinend ist da was falsch in der Kamera umgesetzt. Du hast den default port von 80 auf was anderes geändert und das wird in der snapshot url korrekt angezeigt.

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                meerkat
                                schrieb am zuletzt editiert von
                                #143

                                Moin.
                                Wozu benötige ich das Script aus dem ersten Post?
                                Dachte es würde reichen das über die url http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/webrtc einzubinden.
                                Gruß

                                wendy2702W 1 Antwort Letzte Antwort
                                0
                                • M meerkat

                                  Moin.
                                  Wozu benötige ich das Script aus dem ersten Post?
                                  Dachte es würde reichen das über die url http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/webrtc einzubinden.
                                  Gruß

                                  wendy2702W Online
                                  wendy2702W Online
                                  wendy2702
                                  schrieb am zuletzt editiert von
                                  #144

                                  @meerkat Damit der Stream auch gestartet wird.

                                  Bitte keine Fragen per PN, die gehören ins Forum!

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  M 1 Antwort Letzte Antwort
                                  0
                                  • wendy2702W wendy2702

                                    @meerkat Damit der Stream auch gestartet wird.

                                    M Offline
                                    M Offline
                                    meerkat
                                    schrieb am zuletzt editiert von
                                    #145

                                    @wendy2702 ok, danke

                                    1 Antwort Letzte Antwort
                                    0
                                    • wendy2702W wendy2702

                                      @tombox Bin gerade dabei VIS von Motioneye auf RTSP2WEB zu stellen. Dann mal auf Bewegung warten oder morgen selber generieren.

                                      Fakt ist das die Prozessor Last im Vergleich zu Motioneye nichts ist.

                                      R Offline
                                      R Offline
                                      Rookie50
                                      schrieb am zuletzt editiert von Rookie50
                                      #146

                                      @wendy2702 Ich habe eine kurze Frage zum Player. Ich würde den gerne auf mehreren Views benutzen. Aber dazu muss der Player oder der Stream neu geladen werden. Wenn ich den View wechsel sieht es so aus:
                                      3258ce68-5113-4d47-88b9-e1f860066e5a-grafik.png
                                      Gibt es dazu eine Möglichkeit? Oder muss ich für jeden View ein seperates Widget und Script erstellen?

                                      T wendy2702W 2 Antworten Letzte Antwort
                                      0
                                      • R Rookie50

                                        @wendy2702 Ich habe eine kurze Frage zum Player. Ich würde den gerne auf mehreren Views benutzen. Aber dazu muss der Player oder der Stream neu geladen werden. Wenn ich den View wechsel sieht es so aus:
                                        3258ce68-5113-4d47-88b9-e1f860066e5a-grafik.png
                                        Gibt es dazu eine Möglichkeit? Oder muss ich für jeden View ein seperates Widget und Script erstellen?

                                        T Offline
                                        T Offline
                                        tombox
                                        schrieb am zuletzt editiert von
                                        #147

                                        @rookie50 Muss man nicht für jeden view immer neue widgets anlegen. Ich denke das jeder view ein eignes widgets mit eignen Ids braucht

                                        R 1 Antwort Letzte Antwort
                                        0
                                        • T tombox

                                          @rookie50 Muss man nicht für jeden view immer neue widgets anlegen. Ich denke das jeder view ein eignes widgets mit eignen Ids braucht

                                          R Offline
                                          R Offline
                                          Rookie50
                                          schrieb am zuletzt editiert von Rookie50
                                          #148

                                          @tombox said in Test Adapter onvif camera v1.0.0:

                                          jeden view immer neue widgets anlegen.

                                          Nein, man kann ein Widget auf mehreren Views nutzen. Ich benutzte diese Funktion für ein paar Stati, die ich in mehreren View sehen möchte. Die bekommen dann in den verschiedenen Views einen Namen mit angehangenem "_<VIEWNAME>"
                                          Ok, genau betrachtet sind das dann eigene Widgets ;-)
                                          Aber, dass Script funktioniert bei mir im VIS nur auf dem View, den ich beim ersten Start lade. In anderen Views, auch wenn es das einzige Widget im Projekt ist, wo die Kamera zu sehen sein soll, startet der Player das Video nicht.
                                          Das verhält sich ähnlich wie das OpenStreetMap Widget.

                                          EDIT: Nachdem ich nun nochmal nach OpenStreetMap geschaut habe und "Immer rendern" ausgeschaltet habe, muss ich nicht immer erst den View mit den Karten laden. Schon mal wieder ein Fortschritt ;-) .
                                          Und nun habe ich (eher per Zufall) herausgefunden, dass man ein Dialog Widget auch in anderen Views aufrufen kann. Somit funktioniert auch nun die Darstellung der Kamera im HTML Dialog bei PIR Bewegungserkennung.

                                          Danke übriges für den Tip mit rtsp2web, endlich ein Kamerastream im VIS ohne viel CPU Leistung. Bei der Synology 220+ ca. 4 % pro Kamera. Motioneye hat deutlich mehr benötigt. Und zudem auch kaum noch Latenz (ca. 0,5 -1 sek.). :+1: :+1:

                                          T 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          848

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe