Le package fourni enregistre un nouveau composant dans la page "custom": TAVIWriter.
Ce composant permet d'écrire des fichiers AVI en utilisant les codecs installés sur la machine. Il est conçu pour fonctionner en mode non-bloquant, c'est à dire qu'il est possible de compresser et d'écrire des frames dans le fichier au fur et à mesure qu'elles sont générées, comme illustré dans le programme d'exemple fourni.
L'intérêt est qu'ainsi, il n'est pas nécessaire de créer un buffer pour les frames non compressées, et donc le programme utilise moins de resources, tant au niveau mémoire que processeur.
J'ai dû me plonger dans des articles assez obscurs (voire mensongers, eh oui, ce n'est d'ailleurs pas la première fois!) de la doc Microsoft pour l'écrire, et trouver comment utiliser les fonctions de VFW.pas (fourni dans le zip). Résultat: ça fonctionne assez bien, du moins chez moi. Du fait de l'utilisation de fonctions très bas niveau des codecs, il serait assez facile de modifier un peu le composant pour envoyer et recevoir de la vidéo compressée sur TCP/IP.
Pour l'instant je n'ai pas encore réussi à tout décrypter la partie de la MSDN qui traite de la compression du son (sérieusement, est-ce que Microsoft paie des gens pour mettre volontairement des erreurs et des imprécisions dans sa documentation, ou au contraire est-ce qu'il ne paie pas ceux qui l'écrivent?).
Donc pas (encore) de possibilité d'inclure une piste sonore dans le fichier AVI généré, mais ça viendra peut-être dans une future version.
Il y a 4 méthodes pour ajoutter une frame à l'AVI:
-Depuis un TBitmap (relativement rapide)
-Depuis un TGraphic (JPEG ou autre, à peine moins rapide)
-Depuis n'importe quel DC, par exemple on peut faire, comme dans l'exemple, une vidéo de son bureau (moyennement rapide)
-Depuis un buffer RGB avec les lignes alignées sur 32 bits (le plus rapide)
Pour créer un AVI, il faut successivement:
-Définir les paramètres du fichier (AVIFileName, AVIWidth, AVIHeight, AVIFrameRate etc...)
-Commencer à enregistrer avec StartRecording
-Ajoutter des frames en utilisant l'une des 4 méthodes décrites ci-dessus
-Finaliser le fichier et stopper l'enregistrement avec StopRecording.
Il faut ABSOLUMENT que StopRecording soit appelé après StartRecording, sinon le fichier risque d'être corrompu ou illisible.
Poour l'instant, je n'ai testé que 3 codecs:
-Non compressé.
-VP62 de Microsoft (fonctionne bien).
-Indeo Video (fonctionne bien en mode normal, mais illisible en mode "real time").
Si quelqu'un a l'occasion d'essayer d'autres codecs, merci de me dire si ça fonctionne ou non.
Tous commentaires pertinents sont les bienvenus.