2012-12-19 12 views
5

Próbuję utworzyć aplikację, w której będę mógł nagrywać wideo z różnych kamer na urządzeniu podczas nagrywania. Na przykład. Użytkownik naciska przycisk "start record" z przedniej kamery, po 5 sekundach nagrywania użytkownik naciska przycisk "Switch Camera" i aplikacja zmienia źródło wideo z kamery przedniej na tylną i nagrywanie jest kontynuowane. Do aparatu swithcing używam następny kod:Brak synchronizacji audio/wideo po przełączeniu kamery

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; 

Po tym appication zmian wideo sourse i kontynuować pisanie, ale ... audio/wideo z synchronizacją ... Czy ktoś hehp mnie z tym problemem?

Dziękuję.

+0

ten sam problem. – Liron

Odpowiedz

1

Musisz zatrzymać nagrywanie, włączyć i ponownie uruchomić. Przełącznik aparatu nie jest natychmiastowy AFAIK

Nie możesz nagrać do n plików, a później połączyć je razem?

spróbuj użyć poszczególnych ścieżek AVMutableComposition, a następnie ustaw mutabekcję dla audio i jedną dla wideo. (patrz Merging two m4v Movie Files Using AVMutableComposition - Videos Will Not Merge)

+0

Dziękuję za odpowiedź. A jeśli przestanę nagrywać i zmieniać kamerę, czy możliwe jest kontynuowanie nagrywania w tym samym pliku? – kroumvud

+0

Przepraszam, nie wiem, ale ... nie możesz po prostu nagrać do pliku N i złożyć je razem później? –

+0

wiesz, jeśli za każdym razem, gdy przestaniesz nagrywać, a następnie rozpoczniesz nowe, że każdy przestanie stary i rozpocznie nowe nagranie, aplikacja będzie zamrażać przez krótki okres czasu ... i to nie jest dobre (( – kroumvud

0

przy włączaniu aparatu, trzeba wstrzymać zapis bufora w metodzie delegata:

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

można kasie projektu PBJVision open source

+0

Czy faktycznie masz to działające na końcu? PBJVision ma ten sam [problem] (https://github.com/piemonte/PBJVision/issues/328), do którego odnosi się to pytanie. –

Powiązane problemy