Voici le problème. J'utilise AVCaptureVideoDataOutput pour obtenir des images vidéo de la caméra et créer une vidéo avec AVAssetWriter. Cela fonctionne bien, mais la vidéo que je reçois est à l'envers car l'orientation par défaut de l'appareil pour mon application est le paysage à gauche, pas le paysage à droite, comme indiqué par défaut dans AVCaptureVideoDataOutput. En essayant de changer d'orientation dans la classe AVCaptureConnection, mais isVideoOrientationSupported est toujours faux, est-il possible de le réparer?Comment changer l'orientation vidéo pour AVCaptureVideoDataOutput
Voici un code:
AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput
deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]
error:nil];
/*We setupt the output*/
AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];
captureOutput.alwaysDiscardsLateVideoFrames = YES;
captureOutput.minFrameDuration = CMTimeMake(1.0, 24.0); //Uncomment it to specify a minimum duration for each video frame
[captureOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
// Set the video output to store frame in BGRA (It is supposed to be faster)
NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[captureOutput setVideoSettings:videoSettings];
/*And we create a capture session*/
self.captureSession = [[AVCaptureSession alloc] init];
self.captureSession.sessionPreset = AVCaptureSessionPresetLow;
/*We add input and output*/
if ([self.captureSession canAddInput:captureInput])
{
[self.captureSession addInput:captureInput];
}
if ([self.captureSession canAddOutput:captureOutput])
{
[self.captureSession addOutput:captureOutput];
}
/*We add the preview layer*/
self.prevLayer = [AVCaptureVideoPreviewLayer layerWithSession: self.captureSession];
if ([self.prevLayer isOrientationSupported])
{
[self.prevLayer setOrientation:AVCaptureVideoOrientationLandscapeLeft];
}
self.prevLayer.frame = self.view.bounds;
self.prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer addSublayer: self.prevLayer];
AVCaptureConnection *videoConnection = NULL;
[self.captureSession beginConfiguration];
for (AVCaptureConnection *connection in [captureOutput connections])
{
for (AVCaptureInputPort *port in [connection inputPorts])
{
if ([[port mediaType] isEqual:AVMediaTypeVideo])
{
videoConnection = connection;
}
}
}
if([videoConnection isVideoOrientationSupported]) // **Here it is, its always false**
{
[videoConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft];
}
[self.captureSession commitConfiguration];
[self.captureSession startRunning];
Upd: pensé que lors de l'exportation vidéo, le AVAssetExportSession perd d'info preferredTransform.
Steve, avez-vous eu ce travail? Je voulais savoir comment vous avez utilisé AVAssetWriter avec ceci. Je veux être en mesure de diffuser de la vidéo depuis l'iPhone. – nickfox
J'espère que ça aide. http://pastebin.com/RVEqWnyN – Steve
Lorsque vous utilisez l'URL que vous obtenez: Le "Pastebin" a peut-être expiré ou a été supprimé! –