Aller au contenu

Video Capture SDK pour Delphi

Video Capture SDK Delphi

Cette section présente l'utilisation du Video Capture SDK avec Delphi pour créer des applications de capture vidéo et audio. Le composant TVFVideoCapture (déclaré dans VideoCaptureMain.pas) est un descendant de TCustomPanel : il fournit donc à la fois la surface d'aperçu et l'ensemble de l'API de capture sous forme de propriétés publiées, de méthodes et d'événements.

Composant principal

TVFVideoCapture

TVFVideoCapture offre une fonctionnalité complète de capture vidéo et audio. Vous pouvez le déposer sur une fiche depuis la palette de l'IDE ou le créer à l'exécution. Comme il descend de TCustomPanel, définissez Parent et Align comme pour n'importe quel conteneur VCL.

var
  VideoCapture1: TVFVideoCapture;
begin
  VideoCapture1 := TVFVideoCapture.Create(Self);
  VideoCapture1.Parent := Panel1;
  VideoCapture1.Align := alClient;
end;

Énumération des périphériques

Remplissez des combo-box avec les périphériques de capture vidéo et audio détectés sur l'hôte. Le SDK expose des paires _GetCount / _GetItem(Index) pour chaque liste de périphériques.

procedure TForm1.EnumerateDevices;
var
  i: Integer;
begin
  // Périphériques de capture vidéo
  cbVideoDevices.Clear;
  for i := 0 to VideoCapture1.Video_CaptureDevices_GetCount - 1 do
    cbVideoDevices.Items.Add(VideoCapture1.Video_CaptureDevices_GetItem(i));

  // Périphériques de capture audio
  cbAudioDevices.Clear;
  for i := 0 to VideoCapture1.Audio_CaptureDevices_GetCount - 1 do
    cbAudioDevices.Items.Add(VideoCapture1.Audio_CaptureDevices_GetItem(i));
end;

Aperçu

Basculez le composant en Mode_Video_Preview pour afficher la vidéo en direct sur le panneau sans rien écrire sur le disque. La surveillance audio est contrôlée par Audio_PlayAudio.

procedure TForm1.StartPreview;
begin
  // Sélection des périphériques par leur nom d'affichage
  VideoCapture1.Video_CaptureDevice := cbVideoDevices.Text;
  VideoCapture1.Audio_CaptureDevice := cbAudioDevices.Text;

  // Mode aperçu (aucune sortie fichier)
  VideoCapture1.Mode := Mode_Video_Preview;
  VideoCapture1.Audio_PlayAudio := True;

  VideoCapture1.Start;
end;

procedure TForm1.StopPreview;
begin
  VideoCapture1.Stop;
end;

Capture vers un fichier

Basculez en Mode_Video_Capture et affectez Output_Filename et Output_Format. L'énumération TVFOutputFormat liste tous les conteneurs que le composant peut écrire (Format_MP4, Format_AVI, Format_WMV, Format_DV, Format_WebM, Format_FFMPEG, Format_FFMPEGX, etc.).

procedure TForm1.StartCapture;
begin
  VideoCapture1.Video_CaptureDevice := cbVideoDevices.Text;
  VideoCapture1.Audio_CaptureDevice := cbAudioDevices.Text;
  VideoCapture1.Audio_RecordAudio := True;

  // Fichier de sortie et conteneur
  VideoCapture1.Output_Filename := 'C:\Videos\capture.mp4';
  VideoCapture1.Output_Format := Format_MP4;

  // Bascule en mode capture
  VideoCapture1.Mode := Mode_Video_Capture;

  VideoCapture1.Start;
end;

Vous pouvez changer le fichier de sortie à la volée, sans arrêter le graphe, en appelant OutputFilename_ChangeOnTheFly.

Captures d'image

Enregistrez l'image courante de l'aperçu sur disque dans n'importe laquelle des valeurs TVFImageFormat prises en charge (IM_BMP, IM_JPEG, IM_PNG, IM_GIF, IM_TIFF). Le troisième paramètre est la qualité JPEG (ignoré pour les autres formats).

procedure TForm1.TakeSnapshot;
begin
  VideoCapture1.Frame_Save('C:\Photos\snapshot.jpg', IM_JPEG, 85);
end;

Pour récupérer directement l'image dans un TBitmap (par exemple pour l'afficher dans un TImage), utilisez Frame_GetCurrent :

procedure TForm1.TakeSnapshotToMemory;
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    VideoCapture1.Frame_GetCurrent(Bitmap);
    Image1.Picture.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;

Caméras IP (RTSP / HTTP)

Basculez le mode en Mode_IP_Preview ou Mode_IP_Capture et renseignez IP_Camera_URL. Utilisez IP_Camera_Type pour choisir le moteur et le protocole — par exemple IP_RTSP_TCP pour du RTSP sur TCP via le moteur FFmpeg, ou IP_Auto_VLC pour basculer sur la source VLC embarquée.

procedure TForm1.ConnectIPCamera;
begin
  VideoCapture1.IP_Camera_URL := 'rtsp://user:password@192.168.1.100:554/stream';
  VideoCapture1.IP_Camera_Type := IP_RTSP_TCP;
  VideoCapture1.Mode := Mode_IP_Preview;
  VideoCapture1.Start;
end;

Capture d'écran

Le composant enregistre le bureau, un écran individuel, une région ou une fenêtre. Définissez le rectangle de capture (ou activez le plein écran), choisissez une fréquence d'images, puis basculez en Mode_Screen_Capture.

procedure TForm1.StartScreenCapture;
begin
  // Capture plein écran à 30 fps avec le curseur de la souris inclus
  VideoCapture1.Screen_Capture_FullScreen := True;
  VideoCapture1.Screen_Capture_FrameRate := 30.0;
  VideoCapture1.Screen_Capture_Grab_Mouse_Cursor := True;

  VideoCapture1.Output_Filename := 'C:\Videos\screen.mp4';
  VideoCapture1.Output_Format := Format_MP4;

  VideoCapture1.Mode := Mode_Screen_Capture;
  VideoCapture1.Start;
end;

Pour une capture de région, désactivez Screen_Capture_FullScreen et fournissez Screen_Capture_Left, Screen_Capture_Top, Screen_Capture_Right et Screen_Capture_Bottom (tous en pixels). Voir Capture d'écran pour l'ensemble complet des options.

Effets vidéo

Les effets (luminosité, contraste, saturation, retournement, flou, niveaux de gris, sépia et bien d'autres) sont gérés par Video_Effect_Ex. Activez d'abord le pipeline d'effets avec Video_Effects_Enabled := True, puis ajoutez chaque effet par sa valeur TVFEffectType. L'argument Amount est l'intensité de l'effet — pour ef_contrast il décale le contraste, pour ef_flip_right il sert d'indicateur d'activation, etc.

procedure TForm1.ApplyVideoEffects;
begin
  VideoCapture1.Video_Effects_Enabled := True;

  // ID=1, appliqué sur tout le graphe (StartTime=0, StopTime=0), activé,
  // effet de contraste avec intensité = 20
  VideoCapture1.Video_Effect_Ex(1, 0, 0, True, ef_contrast, 20.0, '');

  // ID=2, retournement horizontal
  VideoCapture1.Video_Effect_Ex(2, 0, 0, True, ef_flip_right, 0.0, '');
end;

Supprimez des effets individuels avec Video_Effects_Remove(ID) ou videz la liste complète avec Video_Effects_Clear.

Incrustation de texte

Utilisez Video_Effects_Text_Logo (incrustation GDI historique) ou Video_Effects_Text_Logo_Plus (incrustation GDI+ moderne avec dégradés, rotation et effets de contour) pour incruster du texte dans le flux vidéo. L'exemple ci-dessous emploie Video_Effects_Text_Logo_Plus.

procedure TForm1.AddTextOverlay;
begin
  VideoCapture1.Video_Effects_Enabled := True;

  // ID=10, durée totale (0..0), activé, « My Video » en (10, 10),
  // Arial 24, sans gras/italique/souligné/barré, couleur blanche
  VideoCapture1.Video_Effects_Text_Logo_Plus(
    10, 0, 0, True, 'My Video', 10, 10,
    'Arial', 24, False, False, False, False, clWhite);
end;

Événements

TVFVideoCapture déclenche trois événements de cycle de vie principaux : OnStart, OnStop et OnError. Aucun ne porte de paramètre SenderOnError reçoit le message d'erreur sous forme de WideString.

procedure TForm1.VideoCapture1Start;
begin
  Button1.Caption := 'Arrêter';
end;

procedure TForm1.VideoCapture1Stop;
begin
  Button1.Caption := 'Démarrer';
end;

procedure TForm1.VideoCapture1Error(ErrorText: WideString);
begin
  ShowMessage('Erreur de capture : ' + ErrorText);
end;

D'autres événements couvrent l'accès en direct aux trames (OnVideoFrame, OnAudioFrame), la détection de mouvement (OnMotion), l'activité souris et clavier sur la surface d'aperçu, les valeurs des VU-mètres, les événements de transport DV et la recherche de canaux du tuner TV.

Ressources de développement

Pour des conseils d'implémentation détaillés, explorez ces ressources essentielles :

Tutoriels d'implémentation

Enregistrement et traitement audio

Maîtrisez la capture audio grâce à ces guides pas à pas :

Capture vidéo et contrôle des périphériques

Apprenez les techniques essentielles de manipulation vidéo :

Techniques média avancées

Explorez des scénarios d'implémentation sophistiqués :