Tutoriel Programmation Mac : Capture Video

Posted on December 6, 2009

Merci à Aurélien, l’ancien président de MacEFREI, pour ce tuto ;)

Dans cet article nous allons voir que la programmation sur Mac n’a vraiment rien de bien compliqué, les frameworks sont très complets et proposent une pléthore de fonctions pour presque tout ce que vous souhaiteriez faire. Et nous allons voir ça en réalisant une petite application qui se chargera d’afficher la vidéo de votre iSight. Tout cela en moins de 50 lignes de code.

Pour le réaliser de quoi avez vous besoin ?

  • Un mac
  • Une webcam (iSight ou camera firewire)
  • Developper Tools d’Apple que vous pourrez trouver sur le cd d’installation de Mac OS X ou directement sur le site Developper Apple (https://developer.apple.com/mac/)

Je suppose que vous êtes capable d’installer un logiciel sur Mac OS X…  :)

new-project

Ouvrez Xcode et créez un nouveau projet (File -> New Project) et sélectionnez Mac OS X, Cocoa Application. Nul besoin de cocher les deux options en dessous. Puis cliquez sur “choose” et donnez un nom à votre projet. Vous obtiendrez alors une fenêtre comme celle ci :

mainm-cam_macefrei-main

On retrouve donc 4 dossiers principaux :

  • “Classes”, qui va contenir les fichiers de vos classes (C’est fou !)

mainm-cam_macefrei-classes

  • “Other Sources” contient les autres sources telles que main.m (point de départ de votre programme) et qui est aussi utilisé pour les “helpers”.

mainm-cam_macefrei-other-sources

  • On trouve également “Resources” qui contient vos fichiers xib (le xib est un nib non compilé, ce qui est beaucoup plus facile à versionner).
  • Et enfin le dossier “Frameworks” qui va contenir tous les paquets utilisés pour vous mâcher le travail.

A partir d’ici nous allons créer une classe, pour cela : clique droit sur le dossier “Classes” -> “Add” -> “New File…”. Choisissez Objective-C class, subclass of NSObject puis cliquez sur next pour lui donner un nom. Généralement, les développeurs utilisent un préfixe devant le nom de leurs classes (pour éviter tout conflit de nom), généralement les initiales du développeur ou de la société. Pour moi ce sera ME pour MacEFREI donc je vais nommer ma classe MECamController.

On voit alors arriver deux fichiers le .h pour la définition et le .m pour l’implémentation. Nous avons donc créé un objet nommé MECamController. Nous allons lui définir ses attributs mais avant il est nécessaire d’inclure le framework QuickTime. Pour cela, déroulez le menu “Targets” puis clique droit sur son contenu -> “Get info”. Dans l’onglet “General” de la nouvelle fenêtre, cliquez sur le “+” en dessous de “Linked Librairies” puis cherchez QTKit.framework dans la longue liste déroulante et ajoutez le.

target-e2809ccam_macefreie2809d-info

Retournez dans MECamController.h et ajoutez l’inclusion du framework avec la ligne #import <QTKit/QTKit.h> en dessous de l’import de Cocoa.

La préparation est terminée, nous allons enfin pouvoir ajouter un peu de code dans ce projet.

Toujours dans MECamController.h vous devez mettre ceci :

capture-de28099ecc81cran-2009-12-06-acc80-130820

Quelques explications s’imposent :

IBOutlet est une macro qui indique que l’attribut va être utilisé par l’interface, captureCam est donc la représentation de notre flux vidéo que nous allons afficher.

camSession représente la session de capture liée à la caméra, c’est elle qui contient toutes les informations liées à notre connexion à la caméra.

camInput représente une sorte de tampon qui reçoit un flux d’un périphérique.

Maintenant direction MECamController.m pour implémenter la méthode qui va nous permettre de mettre en route tout ça.

L’implémentation se fait entre les balises “@implementation MECamController” et “end”

Ajoutons la méthode awakeFromNib qui est appelée automatiquement lors de l’instanciation de notre objet à la création de l’interface :

capture-de28099ecc81cran-2009-12-06-acc80-132342

Je pense que les commentaires parlent d’eux mêmes pour comprendre le code.

Voila la partie code est finie, maintenant finissons le travail avec la mise en forme de notre interface. Double cliquez sur MainMenu.xib qui se trouve dans le dossier Ressources.

mainmenuxib-anglais

Interface Builder va s’ouvrir affichant une belle fenêtre grise, vide, et la barre de menu.

Précédemment je vous ai dit que l’objet MECamController est automatiquement instancié lors de la création de l’interface, encore faut-il dire à l’interface de créer cet objet. Pour cela cherchez “object” dans la fenêtre Library (ou tapez “ob” dans la barre de recherche)

library-2

Glissez le dans la fenêtre nommée “MainMenu.xib” puis dans l’inspecteur et cliquez sur le dernier onglet (icone “i”). Si vous ne l’avez pas, sélectionnez l’objet que vous venez d’ajouter puis dans la barre de menu Tools->identity inspector.

Dans le menu class, choisissez MECamController.

cam-controller-identity

Maintenant retournez dans Library et cherchez “Quicktime capture view” (ou entrez simplement qt dans la recherche) et glissez le dans la fenêtre d’interface de votre application, redimensionnez le comme bon vous semble.

library

Nous approchons de la fin, il ne reste plus qu’a lier la QTCaptureView que nous venons d’ajouter à notre IBOutlet précédemment déclaré. Pour ceci, maintenez CTRL appuyé, cliquez sur l’objet qui se nomme maintenant MECamController, et glissez le sur la QTCaptureView, relâchez et vous verrez apparaître la liste des IBOutlets (ici uniquement camCapture), cliquez sur camCapture.

cam_macefrei

Voila, enregistrez et revenez sur Xcode, cliquez sur l’icône “Build and Run” et votre magnifique application apparait vous montrant combien vous êtes beau/belle.

cam_macefrei-2

Ce tutorial vous à peut être paru un peu long mais une fois le mécanisme compris il ne faut pas plus de 2 minutes pour faire une telle application. Pour en savoir plus sur tous les frameworks ou l’objective-c, je vous invite à consulter la bibliothèque intégrée dans Xcode : Help->Developper Documentation, une bible pour tout développeur objective-c.

Pour un courte introduction à ce magnifique langage vous pouvez consulter cet article ainsi que les autres articles dédiés au développement sur iPhone dont nous avons parlé dans un précédent article :)

Vous trouverez l’article original et le code source du projet sur le blog de son auteur.

Tags: , , , , , ,

3 Responses to “Tutoriel Programmation Mac : Capture Video”

  1. Mr Hawks
    Apr 19, 2010

    Héhé :D


  2. Darren Junkie
    Apr 21, 2010

    Merci pour le partage, cela va faire plaisir a bon nombre de lecteurs.


  3. Davion Brinkman
    Apr 21, 2010

    Super !!! Merci beaucoup :)



Leave a Reply