Grabación / reproducción sincronizada ios

Estoy creando una aplicación donde se supone que el usuario debe grabarse video mientras se reproduce otro video en la pantalla al lado de la vista de la camera. El resultado será dos files de video, una fuente y una grabación. Usando AVCaptureSession, etc., he logrado grabar un video al mismo time que otro video se está reproduciendo en la pantalla. El problema es que no está completamente sincronizado.

Así es como lo he configurado ahora mismo:

-(void)playAndRecordInSync //Session is already set etc. { player = [AVPlayer playerWithURL:url]; playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; [playerLayer setFrame:leftCameraView.bounds]; [playerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; [leftCameraView.layer addSublayer:playerLayer]; //Will stop recording camera when source video reaches end(notification): player.actionAtItemEnd = AVPlayerActionAtItemEndNone; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[player currentItem]]; //Start playback: [player play]; //Start recording: [movieOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self]; } - (void)playerItemDidReachEnd:(NSNotification *)notification { [movieOutput stopRecording]; } 

El resultado de esto son dos videos, pero el segundo (grabado) es un poco más largo que el original / original. Al reproducirlos uno encima del otro (al mismo time), luego n. ° de video. 2 tiene un retraso de casi medio segundo. Parece que video2 ha comenzado a grabar demasiado pronto, debido al time "extra". Probablemente también podría ser que la reproducción comenzó demasiado tarde. De cualquier manera, no sé cómo hacer aquí ninguna consistencia basada en esto. Probablemente podría jugar mucho con el sueño, etc., pero eso solo funcionaría para mi teléfono, ya que esto tiene algo que ver con la rapidez con que está el teléfono. Incluso si hay un método de delegado como -(void)willStartPlaying para AVPlayer , que no creo que haya, todavía habría un problema con la synchronization, ya que hay una pequeña espera hasta el retorno. ¿Hay alguna forma de disparar dos commands a la vez? ¿O hay otra solución para esto?

EDITAR

He estado leyendo esto ( AVSynchronizedLayer ), pero no estoy seguro si esto es aplicable a mi situación, y no entiendo cómo proceder.

Descubrí que la demora siempre se debía a que la reproducción comenzaba demasiado tarde, pero tanto la grabación como la reproducción se detuvieron al mismo time, así que resolví esto encontrando v2.duration - v1.duration y restando el resultado desde el principio de v2, usando AVAssetExportSession . Cuando reproduzco ambos videos a la vez ahora, en diferentes capas, todavía hay algo de retraso al iniciar ambos, pero al exportar los videos, he confirmado que tienen la misma longitud y están sincronizados ahora.