Enregistrement et archives vidéo des caméras IP, LucaTNT - s

post navigation

Enregistrement et archives vidéo des caméras IP, LucaTNT - s

Une chose que je voulais, cependant, était d'avoir les images des 1-7 derniers jours disponibles à tout moment. Le firmware embarqué permet d'enregistrer sur un serveur FTP, mais cela était suboptimale, il n'y avait pas moyen facile de définir la longueur du clip et était assez maladroit de mettre en place.







J'ai commencé à creuser autour, et je trouve que ffmpeg pourrait facilement enregistrer le flux RTSP des caméras. Dans les paramètres de caméras, vous pouvez choisir le débit vidéo, jusqu'à 4 Mbits. Je trouve que le débit optimal est de 2 Mbit: aller à 4 voulais seulement dire que les fichiers étaient deux fois la taille sans amélioration notable de la qualité.
Il en résulte environ 15 Go par jour par caméra de fichiers vidéo. C'est bien inférieur à 2 Mbit moyenne, et cela est dû au fait que pendant la nuit, avec l'IR s'allume, l'image vire au noir et blanc et le débit réduit à environ la moitié de la valeur habituelle.

Je suis venu avec une solution complète qui est faite des éléments suivants:

  • Deux caméras IP Foscam FI9805W, mais un nombre raisonnable de cames peut être utilisé
  • Mon serveur domestique, Debian, qui est sur le 24/7
  • Un cronjob qui enflamme ffmpeg toutes les 15 minutes pour enregistrer 15 clips minutes. Cela rend la recherche beaucoup plus facile que d'avoir à traiter avec des enregistrements géants de plusieurs heures.
  • Un cronjob qui déclenche tous les jours à minuit, qui convertit les enregistrements de plus de 24 heures à beaucoup plus petits fichiers à faible et framerate de faible qualité pour réduire l'utilisation du disque
  • Un cronjob qui déclenche tous les jours à 4 heures pour purger les anciens enregistrements.

enregistrement vidéo

Ceci est la partie facile. Je viens d'utiliser ce script, que j'ai appelé recordCam.sh:

Voir le code sur Gist.

Vous devez ajouter un cronjob à votre système, au feu ce script toutes les 15 minutes:

Conversion en basse qualité pour l'archivage

Le script que j'utilise, convertVideo.sh, est la suivante:

Voir le code sur Gist.

Il faut le fichier que vous passez à elle, crée la structure de dossier approprié et code, puis il supprime le fichier d'origine.

J'utilise la commande find pour obtenir les vidéos qui doivent être converties, et il semble pour les fichiers de plus de 10 méga-octets que la dernière modification il y a plus de 1440 minutes. Bien sûr, vous êtes libre de modifier ces paramètres que vous le souhaitez.

Élagage anciennes vidéos

Alors, voici la tâche cron pour faire le travail (jeu de mots):

Le -mindepth 3 paramètre a été nécessaire en raison de la structure du dossier que j'ai choisi, ce qui est:. Archives / camXX / AAAA-MM / JJ / * mp4

  • Au premier niveau de profondeur, il y a les dossiers de chaque caméra. Leur date de dernière modification change à chaque fois que vous ajoutez ou supprimez un fichier / foder l'intérieur, de sorte que cela se produit en fait le 1er du mois Evert, lorsque le dossier du mois est créé.
  • Au deuxième niveau, il y a les dossiers AAAA-MM, donc nous ne devrions pas les toucher
  • Enfin, au troisième niveau, il y a nos dossiers « jour », que nous voulons supprimer quand ils deviennent trop vieux.

Ensuite, une tâche cron finale qui supprime les répertoires mois et vides

Vous avez terminé

26 réflexions sur « Enregistrement vidéo et archives à partir de caméras IP »

Héy. C'est un guide très agréable. Tout ce que je cherche, mais je ne peux pas le faire fonctionner.






Serait-il possible de faire un guide détaillé, sur la façon de faire ce travail.
Quel système d'exploitation dois-je installer. Lequel est le meilleur pour ce projet?

Sincères amitiés.
Pedersen Michael

Salut michael,
J'utilise Debian, mais tout distro Linux vous êtes à l'aise avec la volonté de le faire, la seule exigence est d'installer ffmpeg.
Un guide détaillé me ​​prendre des heures à écrire, et je n'ai vraiment pas beaucoup de temps libre pour le moment.
Une suggestion rapide: enregistrer le script fourni dans le même dossier, les modifier au besoin (surtout la modification des adresses IP, les informations de connexion et chemins), les rendre exécutable (chmod + x /path/to/the/script.sh), ajoutez le cronjobs nécessaires, comme celles par exemple que j'ai posté, en exécutant crontab. coller la ligne fournie, et enregistrez le fichier.

Cela devrait être, je l'espère aide.

Je travaille actuellement à la caméra ffmpeg et RTSP est aussi bien, et je me demandais:
Pourquoi ne pas vous laissez envoyer l'appareil photo d'un second flux de faible qualité (certains de l'appareil photo peut le faire) et vous enregistrer ce flux ainsi, mais comme un (faible) flux de qualité. Après une semaine, lorsque vous voulez supprimer les cours d'eau de haute qualité, il suffit d'une simple commande de suppression. Les cours d'eau de faible qualité sont encore dans vos archives.

Vous pouvez même aller aussi loin pour laisser ffmpeg créer des fichiers JPEG statiques toutes les 2-3 secondes, et les pour éternellement en toute sécurité.

La chose importante est que vous voulez que le système fonctionne une fois, et ne pas laisser crunch votre CPU par recoder en permanence les fichiers Olders pendant que vous auriez pu gagner en faible qualité la première fois, et laissez votre appareil photo faire le mot dur.

Salut Edwin,
vous êtes tout à fait raison, ce serait une belle solution.
Cependant, même en utilisant flux secondaire de la caméra le fichier de sortie est assez grand, environ 4 fois la taille que je reçois pour mon faible qualité de stockage « à long terme ».

Il est vrai, cependant, que l'espace disque dur est pas cher ces jours-ci, donc je pourrais penser à passer à votre solution et sauver un certain pouvoir à l'avenir.

Heureusement, la solution est facile. Ajouter killall -INT ffmpeg au sommet du script recordCam.sh. Le commutateur -INT simule une interruption utilisateur (ctrl-c), et permettra ffmpeg pour sortir proprement et écrire un fichier utilisable.

C'est un bon conseil, merci!

Au lieu d'avoir 2 emplois pour supprimer des fichiers et des dossiers, vous pouvez avoir un. Sur la première commande « trouver » qui trouve des dossiers de plus de 5 jours, changer la commande exec être « rm -rf ». Il va supprimer le dossier et tous les fichiers qu'il contient en même temps. scripts Nice!

Salut Bill!
La première découverte obtient tous les fichiers qui doivent être convertis, et le script de conversion prend soin de supprimer les originaux une fois qu'il est fait, donc je dois le second pour supprimer les répertoires vides qui ont été laissés derrière.
Je ne peux pas rm -rf dans le premier parce qu'il ya peut-être encore des vidéos à convertir dans les dossiers.

Pourriez-vous ou quelqu'un suggérer quelque chose sur la façon de faire le tri?

Je vous remercie,
Csaba

Salut Csaba,
Je l'ai vérifié deux fois ma configuration et je ne lâche aucune vidéo, de toute façon pour aider à diagnostiquer la source de votre problème, je vous suggère d'enregistrer un fichier journal différent pour chaque mandrin 15 minutes en modifiant les dernières lignes de remplacement recordCam /tmp/cam01.log avec /tmp/cam01-$name.log ou quelque chose comme ça

Très bonne idée, merci. Pendant ce temps, je l'ai découvert qu'il ya 3 paquets manqués RTP dans chaque fichier journal. J'utilise avconv au lieu de ffmpeg car je ne pouvais pas le faire fonctionner sous Raspbian Jessie. Je ne pense pas que ce soit l'origine du problème. Pour autant que je sais avconv et ffmpeg sont très similaires dans la syntaxe, ils ne sont pas.
En cas de développement dans ce numéro, je vais partager avec U et d'autres.

Salut Luca, merci pour le partage de vos scripts, m'a sauvé beaucoup de temps à trouver tout cela par moi-même!

Je suis content que ça a aidé!

Salut Kleriger,
En fait, ce paramètre n'a jamais vraiment fonctionné pour moi non plus, je pense que ffmpeg suit juste le taux de fps de la source.

c'est exactement ce que je cherche, merci beaucoup bro
mais comment obtenir le son?
et il y a quelques objets sur ma vidéo, puis-je résoudre ce problème?

Pourquoi êtes-vous allé avec « -t 900 » au lieu de « -segment_time 900 »?

Pour être honnête, je ne savais pas cette option existait, mais après avoir regardé ce que je dirais qu'il est assez pratique, mais il semble que il ne peut les fichiers de sortie avec un nom de fichier progressif, sans contenir explicitement la date et l'heure de l'enregistrement .

ajouter la date et l'heure au nom de fichier segment utilisation

-segment_atclocktime 1 -strftime 1 « cam1-% Y-% m -._% H-% M-% S.mp4 »

Merci pour le conseil!

Bonjour
Cela semble bon, je dois encore essayer, mais je me demande
Qu'advient-il si la perte de connexion au cours de la période de 15 minutes que le ffmpeg est en cours d'exécution?
Si l'appareil photo revient, sera perdu toute la session de 15 minutes, ou se ffmpeg attendre jusqu'à ce qu'une connexion revient et continuer la sauvegarde du flux?

Si la connexion tombe FFmpeg temps et sauver ce qu'il a (le fichier sera parfois corrompu, mais 95% des temps VLC sera en mesure de jouer de toute façon).
En supposant que l'appareil photo est de retour en ligne, le prochain morceau de 15 minutes ne sera pas affecté.

Laisser un commentaire Annuler la réponse







Articles Liés