2012-12-19 15 views
5

Sto provando a creare un'applicazione in cui posso registrare video da fotocamere diverse sul dispositivo durante la registrazione. Ad esempio. Premere il pulsante "Avvia registrazione" dalla fotocamera anteriore, dopo 5 secondi di registrazione premere il pulsante "Cambia fotocamera" e l'applicazione cambia sorgente video dalla fotocamera anteriore a quella posteriore e la registrazione continua. Per swithcing fotocamera che uso codice successivo:Audio/video fuori sincrono dopo lo switch camera

NSError *error; 
AVCaptureDeviceInput *newVideoInput; 
AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position]; 

if (currentCameraPosition == AVCaptureDevicePositionBack) 
{ 
    currentCameraPosition = AVCaptureDevicePositionFront; 
} 
else 
{ 
    currentCameraPosition = AVCaptureDevicePositionBack; 
} 

AVCaptureDevice *backFacingCamera = nil; 
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
for (AVCaptureDevice *device in devices) 
{ 
    if ([device position] == currentCameraPosition) 
    { 
     backFacingCamera = device; 
    } 
} 
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error]; 

if (newVideoInput != nil) 
{ 
    [_captureSession beginConfiguration]; 

    [_captureSession removeInput:videoInput]; 
    if ([_captureSession canAddInput:newVideoInput]) 
    { 
     [_captureSession addInput:newVideoInput]; 
     videoInput = newVideoInput; 
    } 
    else 
    { 
     [_captureSession addInput:videoInput]; 
    } 
    //captureSession.sessionPreset = oriPreset; 
    [_captureSession commitConfiguration]; 
} 

_inputCamera = backFacingCamera; 

Dopo questa appication cambiamento di video sourse e continuare a scrivere, ma ... audio/video fuori sincrono ... Qualcuno può hehp con questo problema?

Grazie.

+0

Avendo lo stesso problema. – Liron

risposta

1

è necessario interrompere la registrazione, passare e riavviarlo. l'interruttore della fotocamera non è istantaneo AFAIK

non è possibile registrare in n file e in seguito metterli insieme?

provare a utilizzare le singole tracce di AVMutableComposition e quindi impostare una mutablecomposition per audio e una per video. (vedi Merging two m4v Movie Files Using AVMutableComposition - Videos Will Not Merge)

+0

Grazie per la risposta. E se smetto di registrare e cambiare la fotocamera, è possibile continuare a registrare in qualche modo nello stesso file – kroumvud

+0

scusa, non lo so ma ... non puoi semplicemente registrare in N file e metterli insieme più tardi? –

+0

sai, se ogni volta interrompi la registrazione e poi ne inizi una nuova, che si ferma prima e inizia una nuova registrazione, l'applicazione si bloccherà per un breve periodo di tempo ... e questo non va bene (( – kroumvud

0

all'accensione telecamera, è necessario interrompere la scrittura del buffer nel metodo delegato:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

potete verifica il progetto open source PBJVision

+0

Hai davvero questo lavoro da parte tua? PBJVision ha lo stesso [problema] (https://github.com/piemonte/PBJVision/issues/328) a cui questa domanda si riferisce. –

Problemi correlati