J'utilise la Fondation AV pour traiter les images de la caméra vidéo (iPhone 4s, iOS 6.1.2). Je configure AVCaptureSession, AVCaptureDeviceInput, AVCaptureVideoDataOutput conformément au guide de programmation de la Fondation AV. Tout fonctionne comme prévu et je suis en mesure de recevoir des images dans le fichier captureOutput:didOutputSampleBuffer:fromConnection:
délégué.
J'ai également un calque de prévisualisation défini comme suit :
AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[videoPreviewLayer setFrame:self.view.bounds];
videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer insertSublayer:videoPreviewLayer atIndex:0];
Le fait est que je n'ai pas besoin de 30 images par seconde dans mon traitement des images et que je ne suis de toute façon pas en mesure de les traiter aussi rapidement. J'utilise donc ce code pour limiter la durée des images :
// videoOutput is AVCaptureVideoDataOutput set earlier
AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
[conn setVideoMinFrameDuration:CMTimeMake(1, 10)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, 2)];
Cela fonctionne bien et limite le nombre de trames reçues par l'application captureOutput délégué.
Cependant, cela limite également le nombre d'images par seconde sur le calque de prévisualisation et la vidéo de prévisualisation devient très peu réactive.
Je comprends d'après la documentation que la durée de l'image est définie indépendamment de la connexion et que la couche de prévisualisation a en effet une connexion AVCaptureConnection différente. En vérifiant les durées d'images mixtes/maximales sur [videoPreviewLayer connection]
montre qu'elle est effectivement réglée sur les valeurs par défaut (1/30 et 1/24) et qu'elle est différente des durées définies dans la connexion de la sortie AVCaptureVideoDataOutput.
Est-il donc possible de limiter la durée de l'image uniquement sur la sortie de capture d'image et de continuer à voir une durée d'image de 1/24-1/30 sur la vidéo de prévisualisation ? Comment ?
Merci.