Enregistrement et stockage
SkyView enregistre localement en segments par défaut, avec la possibilité d'associer 115 Cloud pour une sauvegarde dans le cloud. Ce chapitre explique le mécanisme d'enregistrement, les politiques de rétention et l'intégration 115.
Comment fonctionne l'enregistrement
SkyView découpe la vidéo de chaque caméra en fichiers MP4 standards selon le temps, avec un segment fixe de 60 secondes. MediaMTX écrit d'abord des segments fMP4 ; dès qu'un segment est terminé, le hook runOnRecordSegmentComplete se déclenche, et ffmpeg le remuxe sur place avec -c copy en un MP4 standard avec faststart (moov en tête), afin que tout lecteur puisse chercher directement dans la vidéo. Le chemin sur disque :
data/recordings/
<camera_id>/
2026-05-18_14-30-00.mp4
2026-05-18_14-31-00.mp4
2026-05-18_14-32-00.mp4
...Chemin après archivage
archived, il est déplacé (rename) de façon atomique sous data/recordings/_archive/<camera_id>/, en reproduisant exactement la même arborescence et le même nom de fichier, afin de le distinguer des fichiers en cours d'écriture. Le préfixe _archive/ est une convention : le balayage de découverte de l'uploader l'ignore pour éviter de retraiter les fichiers déjà archivés. En mode 115 Cloud, la conservation de la copie locale dépend du paramètre delete_after_upload (par défaut : suppression après envoi réussi).Chemin de stockage local
Les enregistrements sont écrits dans /app/data/recordings (point de montage imbriqué, qui peut être redirigé séparément vers un grand disque / NAS) ; les petites données d'état comme la base de données, les cookies et les journaux résident dans /app/data, et les modèles d'IA sont intégrés à l'image plutôt que dans le répertoire de données. En production, dirigez toujours le répertoire d'enregistrements vers un disque disposant d'une capacité suffisante, et évitez de le placer sur la même partition que le disque système — un disque d'enregistrements plein empêcherait votre serveur de démarrer.
# Recommandé : montez les enregistrements sur un disque / NAS séparé et volumineux (les petites données restent dans data/)
sudo mkdir -p /mnt/recordings
# Script en une ligne : pointez --recordings-dir vers le grand disque
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash -s -- --recordings-dir /mnt/recordings
# Ou montez le volume d'enregistrements en mode imbriqué dans un docker run manuel
docker run -v $(pwd)/data:/app/data -v /mnt/recordings:/app/data/recordings ...Politique de rétention et espace disque
Web Admin → Paramètres → Rétention des enregistrements pour activer et configurer le nettoyage automatique (désactivé par défaut, à activer manuellement). Une fois activées, les deux règles ci-dessous s'appliquent toutes les deux et chacune peut déclencher une suppression ; seuls les enregistrements archivés (envoyés avec succès, ou en mode local) sont nettoyés ; les états en attente / en cours d'envoi / échoué ne sont jamais touchés :
- Par jours : les enregistrements plus anciens que le nombre de jours de rétention (30 par défaut) → sont supprimés ; mettez 0 pour ne pas déclencher par le temps
- Par capacité : lorsque l'utilisation du disque dépasse le seuil (90 % par défaut) → suppression en commençant par les plus anciens ; mettez 100 pour ne pas déclencher par l'espace
Désactivé par défaut
[cleanup] a enabled=false — si vous le laissez désactivé, tout est conservé ; quand le disque se remplit, les écritures échouent mais SkyView ne supprime rien de lui-même. Pour un déploiement domestique, nous recommandons vivement de l'activer et de laisser le système gérer ce souci via les deux règles ci-dessus.| Résolution | Débit | Utilisation approximative par flux et par 24 heures |
|---|---|---|
| 1080p H.264 | 2 Mbit/s | ~21 Go / jour |
| 1080p H.265 | 1 Mbit/s | ~10 Go / jour |
| 4K H.265 | 4 Mbit/s | ~42 Go / jour |
Formule d'estimation de la capacité
Stockage Cloud 115 (optionnel)
Envoie de façon asynchrone les enregistrements locaux vers 115 Cloud, en somme un « NVR dans le cloud ». Grâce à la prise en charge de l'envoi instantané, les enregistrements déjà présents ne consomment pas de bande passante.
- 1
Scanner pour se connecter
Web Admin → 115 → affichez le QR code et autorisez-le en le scannant avec l'application mobile 115. SkyView enregistre les informations de connexion chiffrées dans le répertoire de données.
- 2
Choisir le dossier cible
Créez un dossier vide dans 115 (par ex. « Enregistrements SkyView »), revenez dans SkyView, puis sélectionnez-le comme destination d'envoi
- 3
Changer le backend de stockage
Paramètres → Stockage → choisissez 115 → Enregistrer. Le changement se fait à chaud, sans redémarrer le processus, et prend effet dès le prochain envoi
- 4
Vérifier que ça fonctionne
Le Web Admin ne dispose actuellement d'aucune file d'attente d'envoi ni panneau de progression. Pour vérifier que les enregistrements sont bien envoyés, trois méthodes possibles : ① la page Paramètres → 115 pour vérifier que le statut VIP et l'espace restant semblent corrects ; ② la page Journaux (barre latérale → Journaux), sélectionnez le service
uploaderà gauche pour suivre en temps réel les lignes de démarrage / fin / échec de chaque segment ; ③ ouvrez l'application ou le site 115 et allez dans le dossier cible pour voir si de nouveaux enregistrements arrivent.
Expiration de la connexion 115
Que faire si vous n'utilisez pas 115
Téléchargement / export
La page de lecture prend en charge l'« export par plage horaire » — choisissez une heure de début et de fin, et le backend réencode et découpe le tout en un seul fichier MP4 à télécharger, avec une précision à l'image près sur le début/la fin (erreur < 40 ms). Le matériel est sélectionné automatiquement : NVIDIA NVENC (50 à 200x le temps réel, quelques dizaines de secondes par heure sur une RTX) → VAAPI iGPU Intel (25 à 50x, une à deux minutes par heure sur un N100) → encodage logiciel libx264 (1,5 à 3x, une dizaine de minutes par heure). Si un palier échoue, il bascule automatiquement sur le suivant. Pris en charge sur Web Admin, Android et iOS.
- 1
Ouvrir la page de lecture
Sélectionnez la caméra et la date à exporter. Faites glisser la frise chronologique près de la plage voulue afin que le repère central se place sur ce segment d'enregistrement.
- 2
Cliquer sur le bouton d'export
Web Admin : l'icône ⬇ tout à droite de la barre de contrôle de lecture ; Android / iOS : « Exporter » à droite du bouton « Vitesse » sur la barre de contrôle. Un panneau de sélection de plage s'ouvre, préréglé sur la position de lecture actuelle ± 30 secondes.
- 3
Ajuster le début/la fin → valider
Modifiez les heures de début/fin dans le panneau ; la taille estimée se calcule en temps réel (1080p H.264 ≈ 250 Ko/s). La durée maximale par export est de 1 heure ; au-delà, la demande est rejetée. Cliquez sur « Démarrer l'export ».
- 4
Suivre la progression
Une carte de progression apparaît en bas à droite (Web) / sous la barre de contrôle (Android/iOS). Le Web se rafraîchit en temps réel via SSE ; le mobile interroge toutes les 2 secondes. Une fois mise en file, une tâche se termine généralement en quelques secondes à quelques dizaines de secondes (selon le nombre de segments et si des segments cloud doivent être récupérés depuis 115).
- 5
Télécharger
Lorsque la carte de progression se transforme en bouton « Télécharger », cliquez dessus : le Web télécharge directement via le navigateur ; Android utilise le DownloadManager système pour enregistrer dans
Downloads/SkyView/avec une notification dans la barre d'état ; iOS ouvre une feuille de partage pour « Enregistrer dans Fichiers / Photos » ou partager vers WeChat.
Accélération matérielle sélectionnée automatiquement : NVENC > VAAPI > libx264
--gpus all ; ~30 à 60 secondes pour 1 h de vidéo sur une série RTX 30/40
- VAAPI (iGPU Intel/AMD) : nécessite l'image openvino/all-in-one + le passthrough de /dev/dri ; ~1 à 2 minutes pour 1 h de vidéo sur un N100, etc.
- libx264 (CPU uniquement) : solution de repli en l'absence de GPU ; ~20 à 40 minutes pour 1 h de vidéo (selon le CPU)
Si un palier échoue à l'exécution (pilote incompatible, limite de sessions, etc.), il bascule automatiquement sur le suivant. Pour en imposer un précisément, utilisez recording.export.hwaccel = "nvenc" / "vaapi" / "none".Les heures de début/fin sont précises à l'image près
qp=23 / VAAPI qp=23 / libx264 crf=23 — le résultat est visuellement quasi identique quel que soit le matériel (les fichiers NVENC peuvent être légèrement plus volumineux, < 10 %). Configurez recording.export.{nvenc,vaapi}_qp pour ajuster la qualité séparément (0-51, plus bas = meilleure qualité).Le mode de stockage Cloud 115 est également pris en charge
Les fichiers exportés sont conservés 24 heures
data/recordings/_exports/<job_id>.mp4 sur le serveur et est automatiquement supprimé par le nettoyage au bout de 24 heures par défaut (pour éviter de saturer le disque). Pendant cette période, vous pouvez recliquer sur « Télécharger » depuis n'importe quel client, à tout moment, pour le même fichier. Une fois expiré, relancez l'export pour l'obtenir à nouveau.Récupérer les segments bruts sans passer par l'interface
data/recordings/<camera_id>/<YYYY-MM-DD_HH-MM-SS>.mp4 (après archivage local, sous data/recordings/_archive/<camera_id>/), chacun étant un MP4 standard. Vous pouvez aussi faire un GET /api/recordings/<id>/download avec un JWT pour récupérer un seul segment.