2012-12-19 7 views
5

Ich versuche, Anwendung zu erstellen, wo ich Video von verschiedenen Kameras auf dem Gerät während der Aufnahme aufnehmen kann. Zum Beispiel. Benutzer drücken Sie die Taste "Start Record" von der Frontkamera, nach 5 Sekunden Aufnahme Benutzer drücken Sie die Taste "Kamera wechseln" und Anwendung wechseln Videoquelle von vorne nach hinten Kamera und Aufnahme fortsetzen. Für Kamera swithcing verwende ich nächsten Code: Video sourseAudio/Video nicht synchron nach Schalter Kamera

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; 

Nach dieser appication ändern und weiter schreiben, aber ... Audio/Video out of sync ... Kann mich jemand hehp mit diesem Problem?

Vielen Dank.

+0

das gleiche Problem. – Liron

Antwort

1

Sie müssen die Aufnahme stoppen, umschalten und erneut starten. der Kamera Schalter ist nicht sofort AFAIK

können Sie nicht in n-Dateien aufnehmen und später sie zusammensetzen?

versuchen Sie, einzelne AVMutableComposition-Spuren zu verwenden und dann eine veränderbare Komposition für Audio und eine für Video festzulegen. (siehe Merging two m4v Movie Files Using AVMutableComposition - Videos Will Not Merge)

+0

Vielen Dank für Ihre Antwort. Und wenn ich die Aufnahme stoppen und die Kamera ändern, ist es möglich, irgendwie in der gleichen Datei weiterzumachen – kroumvud

+0

Entschuldigung, ich weiß nicht, aber ... kann man nur auf N-Datei aufnehmen und sie später zusammensetzen? –

+0

Sie wissen, wenn jedes Mal Aufnahme stoppen und dann ein neues starten, dass jeder alt zu stoppen und eine neue Aufnahme zu starten, Anwendung für kurze Zeit einfrieren wird ... und das ist nicht gut (( – kroumvud

0

, wenn die Kamera wechseln, müssen Sie die Puffer Schreiben im Delegatmethode pausieren:

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

Sie die Open-Source-Projekt PBJVision Prüfung können

+0

Haben Sie tatsächlich dies auf Ihrem Ende funktioniert? PBJVision hat das gleiche [Problem] (https://github.com/piemonte/PBJVision/issues/328), auf die sich diese Frage bezieht. –

Verwandte Themen