PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Capture Vidéo avec Aforge.Video.FFMPEG
Capture Vidéo avec Aforge.Video.FFMPEG
Débuté par Jonathan, 14 jan. 2019 10:56 - 2 réponses
Membre enregistré
3 messages
Posté le 14 janvier 2019 - 10:56
Bonjour,

Dans notre logiciel, nous avons voulu ajouter une petite fonctionnalité afin de pouvoir prendre en vidéo se qu'il se passe dans l'application.

Pour ce faire, je me suis basé sur des tutoriels C# qui utilisaient la bibliothèque Aforge.Video.FFMPEG : .

J'ai légèrement modifié ce qu'il y a dans le tutoriel afin de l'adapter à l'utilisation du logiciel.

J'ai créé un thread qui exécute toutes les 10 centièmes de seconde une procédure qui va me capturer ce qu'il y a sur mon écran.
Mon code est construit comme suie :

//Déclaration Globale de la fenêtre
_bitmap est un System.Drawing.Bitmap dynamic
_graphics est un System.Drawing.Graphics dynamic
_picturebximg est un PictureBox
_writer est un VideoFileWriter dynamic
_writer = new VideoFileWriter()


//Code du bouton "Démarer la capture"
_writer:Open(GF_s_RepTemp+"\Video_"+GF_s_DateAudit+".avi",Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
2,VideoCodec.MPEG4,1000000)
ChronoDébut(2)
Timer("PL_GoVideoTimer",10,1)


Procedure PL_GoVideoTimer()

_size est un System.Drawing.Size dynamic

_bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);

_size = new "System.Drawing".Size(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height);

_graphics = System.Drawing.Graphics.FromImage(_bitmap);

//GF_n_Source_x = position x de l'écran sur lequel s’exécute l'application
//GF_n_Source_Y = position y de l'écran sur lequel s’exécute l'application
_graphics:CopyFromScreen(GF_n_Source_x,GF_n_Source_Y,0,0,_size);

_picturebximg:Image = _bitmap;
_picturebximg:SizeMode = PictureBoxSizeMode.StretchImage;

_writer:WriteVideoFrame(_bitmap);


//Code bouton "Arrêt vidéo"
FinTimer(1)


L'enregistrement de la vidéo se passe très bien, or, je rencontre un problème au niveau du curseur, car il n'est pas visible dans la vidéo.
J'ai donc ajouté un icône représentant le curseur dans la vidéo pour chaque appel de ma procédure PL_GoVideoTimer() à l'aide de ce code :

//Ajout dans la déclaration globale à la fenêtre
_icon est un System.Drawing.Icon dynamic
_icon = new "System.Drawing".Icon(SystemIcons.Exclamation,40,40)


//Ajout dans la procédure PL_GoVideoTimer
_position = CurseurPos(cpEcran)
_positionX = PoidsFaible(_position)
_positionY = PoidsFort(_position)
_graphics:DrawIcon(_icon,_positionX,_positionY)


Donc après l'ajout d'un icône simulant un curseur sur ma vidéo, je me suis aperçu que lors d'un clic sur un bouton contenant un menu contextuel, celui-ci n’apparaissait pas. A partir de là je suis coincé.

Avez-vous une idée afin de me débloquer ?
Un grand merci par avant.

Cordialement,
Jonathan
Message modifié, 14 janvier 2019 - 11:00
Membre enregistré
954 messages
Posté le 14 janvier 2019 - 18:06
Coucou,

L'utilitaire "WD Démonstration" de la LST 110 ne te convient pas ?
"WD Démonstration" vous permet de capturer en vidéo ce qui se passe à l'écran,
une zone définie d'un écran ou bien une fenêtre spécifique.

Reference: https://www.pcsoft.fr/lst/Last/lst110.htm

--
In üs we trust - #92i - #LaPiraterieNestJamaisFinie
Message modifié, 14 janvier 2019 - 18:08
Membre enregistré
3 messages
Posté le 15 janvier 2019 - 10:34
Bonjour,

Je vous remercie pour cette réponse rapide et plutôt efficace. J'ignorais l’existence de ce petit projet fait par Windev.

Après pour ma simple culture si l'on pouvait me donner une explication à mon problème initial, j’apprécierai;

Mais la LST 110 répond très bien à ma demande, à moi d'essayer de l'adapter.

Merci de votre aide.
Cordialement,
Jonathan