Table des matières

Sources :

Serveur RTSPtoWeb (stream de flux RTSP sur le web)

On commence par installer go :

apt-get install go

Puis par télécharger le code source :

git clone https://github.com/deepch/RTSPtoWeb

On se rend dans le répertoire et on teste le lancement :

cd RTSPtoWeb/
GO111MODULE=on go run *.go
En cas d'erreur “build cache is required, but could not be located: GOCACHE is not defined and neither $XDG_CACHE_HOME nor $HOME are defined” :

Cliquez pour afficher ⇲

Cliquez pour masquer ⇱

Cela provient d'un version trop ancienne de go sur Debian. Il faut donc passer par les dépôts bookworm-backports pour avoir une version plus récente de go. On ajoute bookworm-backports au sourcelist :

nano /etc/apt/sources.list
deb http://deb.debian.org/debian bookworm-backports main

Mettre à jour les dépôts :

apt-get update

Installer désinstaller l'ancienne version de go, et réinstaller celle des backports :

sudo remove go && sudo apt install -t bookworm-backports golang-go

Puis on peut commenter la ligne afin de ne plus utiliser les backports :

nano /etc/apt/sources.list
deb http://deb.debian.org/debian bookworm-backports main

Et refaire un update des dépôts :

apt-get update

On configure le serveur :

sudo nano config.json

Par exemple :

{
  "server": {
    "debug": true,
    "log_level": "info",
    "http_debug": false,
    "http_demo": true,
    "http_dir": "web",
    "http_login": "$TONLOGIN",
    "http_password": "$TONPASS",
    "http_port": ":8083",
    "https": true,
    "https_auto_tls": false,
    "https_auto_tls_name": "",
    "https_cert": "/etc/letsencrypt/live/$TONDNS/cert.pem",
    "https_key": "/etc/letsencrypt/live/$TONDNS/privkey.pem",
    "https_port": ":8084",
    "ice_servers": ["stun:stun.l.google.com:19302"],
    "log_level": "debug",
    "rtsp_port": ":5541",
    "token": {
      "backend": "http://127.0.0.1/test.php"
    },
    "defaults": {
      "audio": true
    }
  },
  "streams": {
    "Cam1": {
      "name": "Cam1",
      "channels": {
        "0": {
          "url": "rtsp://$TONLOGIN:$TONPASS@$TONIP:554/Streaming/Channels/102",
          "debug": false,
          "on_demand": true,
          "audio": true,
          "status": 0
        }
      }
    },
    "Cam2": {
      "name": "Cam2",
      "channels": {
        "0": {
          "name": "ch1",
          "url": "rtsp://$TONIP:554/11",
          "debug": false,
          "on_demand": true,
          "audio": true,
          "status": 0
        }
      }
    }
  },
  "channel_defaults": {
    "on_demand": true
  }
}

On teste si tout fonctionne :

GO111MODULE=on go run *.go

Et lancer un navigateur et se rendre sur

https://$TONDNS:8084

Si tout fonctionne, on peut lancer le build de l'application :

sudo GO111MODULE=on go build -o /$TONPATH/RTSPtoWeb/RTSPtoWeb.bin

Puis créer le service RTSP :

sudo nano /etc/systemd/system/rtsp.service
[Unit]
Description=Service RTSPtoWebRTC
 
[Service]
Type=simple
Restart=always
ExecStart= /$TONPATH/RTSPtoWeb/RTSPtoWeb.bin
WorkingDirectory=/$TONPATH/RTSPtoWeb
 
[Install]
WantedBy=multi-user.target

On recharge les services, on lance le service RTSP et on vérifie son status :

sudo systemctl daemon-reload
sudo systemctl start rtsp.service
sudo systemctl status rtsp.service

Une fois que c'est testé via le navigateur, on l'ajoute au lancement lors du boot :

sudo systemctl enable rtsp.service

Exemple :

https://$TONDNS:8084

Intégrer les vidéos dans une page html

Source :

Pour l'ajouter dans une page Web, il faut utiliser videojs ( https://github.com/videojs/http-streaming?tab=readme-ov-file#initialization ). Fichiers : videojs_js_et_css.7z

Exemple dans une page PHP :

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre</title>
  <link href="../css.css" rel="stylesheet">
  <link href="css/video-js.css" rel="stylesheet" />
    <!-- "core" version of Video.js -->
  <script src="js/video.min.js"></script>
  <script src="js/videojs-http-streaming.min.js"></script>
</head>
 
<body>
 
<?php
 
  $TONDNS = "example.org";
 
  $cameras = [
    'Cam1',
    'Cam2',
    'Cam3'
  ];
  foreach ($cameras as $valeur) {
    ?><video-js id=<?php echo ("'".$valeur."'");?> width='540' height='360' class="vjs-default-skin" controls autoplay muted style="margin-bottom:10px;">
      <source src=<?php echo ("'https://".$TONDNS.":8084/stream/".$valeur."/channel/0/hls/live/index.m3u8'");?> type="application/x-mpegURL">
    </video-js>
    <script>
      var player = videojs(<?php echo ("'".$valeur."'");?>);
      player.play();
    </script>
 
&nbsp;
 
<?php
  }
 
?>
 
</body>

Ajouter une nouvelle Cam

Editer la config de RTSPtoWeb :

nano /$TONPATH/RTSPtoWeb/config.json

Ajouter dans les streams :

    ,"NomDeLaCam": {
      "name": "NomDeLaCam",
      "channels": {
        "0": {
          "name": "ch1",
          "url": "rtsp://IPDELACAM:554/11",
          "debug": false,
          "on_demand": true,
          "audio": true,
          "status": 0
        }
      }
    }

Redémarrer le service rtsp :

sudo systemctl restart rtsp.service

Vérifier son statut :

sudo systemctl status rtsp.service

Si tout est OK, la nouvelle cam est disponible par le gestionnaire de RTSPtoWeb.