Enregistrer un Flux RTSP ?

Fermé
Priigame - Modifié le 18 mai 2018 à 08:38
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 18 mai 2018 à 13:30
Bonjour,
Je travail sur un projet de Supervision industriel, et ai à disposition des caméras IP utilisant le protocole RTSP.
Je cherche à enregistrer le flux vidéo mais les applications disponibles ne conviennent pas pour une optimisation.

Je souhaiterais savoir si en C# (seul langue que je connais un peu) permet d'enregistrer ce flux.

Je pensais à une interface proche des logiciels de record (Petite fenêtre avec durée d'enregistrement, un bouton record et une sélection parmi mes caméras installer).

J'aimerais donc savoir si c'est tout simplement réalisable, et si possible comment enregistrer ce flux vidéo.

Merci d'avance :)

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 mai 2018 à 10:46
Bonjour,

En amateur j'ai fait quelque chose de ce genre, en l'occurrence c'était pour enregistrer les flux RTSP télé de la freebox.
C'était il y a déjà bien longtemps (2010...), les choses ont peut-être évolué côté c#, qui n'acceptait pas les flux RTSP à l'époque, mais mon programme fonctionne toujours au poil.
Je n'ai pas directement enregistré en C# les flux, j'ai utilisé le C# pour commander le programme VLC via sa CLI qui contient tout ce qu'il faut pour enregistrer, et encoder à la volée les flux vidéos, y compris avec le choix de la piste audio (pour les vidéos multi-langue).

Mon programme fonctionnait aussi bien sous Linux que sous Windows. Le tout est d'appeler l'exécutable de VLC, suivant là où il est installé (idéalement il faut rendre ce chemin paramétrable dans ton appli), avec les paramètres suivants :
 -vvv --sout "#standard{access=file,mux=ps,dst=__FILE__}" --qt-start-minimized "__FLUX__"

En remplaçant __FILE__ par le chemin de destination, __FLUX__ par l'adresse RTSP.
Tu peux rajouter
 --run-time=__DUREE__
pour enregistrer pendant une durée prédéfinie (en secondes), mais ça s'applique plus à mon cas qu'au tien je pense. De même pour
--audio-track __CANAL__
.

Et pour exécuter une commande externe en C#, tu peux faire ceci :
using System.Diagnostics;
[...]

Process vlc = new Process();
vlc.StartInfo.FileName = "chemin_complet_vers_vlc.exe";
vlc.StartInfo.Arguments = "chaine d'argument telle que définie plus haut";
vlc.Start();

Et tu vas pouvoir contrôler ce processus avec les boutons que tu souhaites mettre en œuvre.

Voilà, j'imagine que tu espérais une réponse qui ne fasse pas appel à un programme externe, mais ça, ça fonctionne :)

Xavier
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 mai 2018 à 10:49
Note supplémentaire, je bossais sur un projet perso qui n'est jamais sorti de chez moi, toi sur un projet industriel tu devras probablement t'assurer de la conformité des licences d'utilisation de VLC...
0
Merci de ta réponse, pour la conformité faudra que je fasse quelque recherche mais par curiosité, ton enregistrement est en arrière plan ou vlc apparait au premier plan ?
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 mai 2018 à 13:30
Le paramètre --qt-start-minimized permet de le laisser en arrière plan
0