2011-08-27 11 views
16

He logrado cargar una video-pista de una película cuadro por cuadro en una textura OpenGL con AVFoundation. He seguido los pasos descritos en la respuesta aquí: iOS4: how do I use video file as an OpenGL texture? y tomó un cierto código de la muestra GLVideoFrame de WWDC2010 que se puede descargar aquí: http://bit.ly/cEf0rMAVFoundation: trabajo de texturas de video a OpenGL - ¿Cómo reproducir y sincronizar audio?

¿Cómo juego a la pista de audio de la película de forma sincronizada con el vídeo. Creo que no sería una buena idea jugarlo en otro jugador, sino usar la pista de audio del mismo AVAsset.

AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 

recupero un VideoFrame y es marca de tiempo en el CADisplayLink-devolución de llamada a través de

CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer]; 
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

donde readerOutput es de tipo AVAssetReaderTrackOutput*

¿Cómo obtener las correspondientes muestras de audio-? ¿Y cómo jugarlos?


Editar:

He mirado un poco y pienso, mejor sería utilizar AudioQueue del AudioToolbox.framework utilizando el enfoque descrito aquí: AVAssetReader and Audio Queue streaming problem

También hay una reproductor de audio en la AVFoundation: AVAudioPlayer. Pero no sé exactamente cómo debo pasar datos a initWithData -inicializador que espera NSData. Además, no creo que sea la mejor opción para mi caso porque tendría que crearse una nueva instancia de AVAudioPlayer para cada nuevo fragmento de muestras de audio, según tengo entendido.

¿Alguna otra sugerencia? ¿Cuál es la mejor manera de reproducir las muestras de audio en bruto que obtengo del AVAssetReaderTrackOutput?

+0

¿Alguna vez llegar a ninguna parte con esto? – RyanSullivan

+0

Mi solución fue abrir la película con AVAssetReader para capturar los marcos para OpenGL, y al mismo tiempo abrir el mismo archivo de película nuevamente con un AVAudioPlayer y dejar que ambos comiencen simultáneamente. No es una buena solución, pero el audio y el video son bastante sincronizados. Desde entonces no tuve tiempo para trabajar en una mejor solución. – j00hi

+0

También estoy usando AVAudioPlayer pero la sincronización de audio no es muy buena. Tener una solución real sería mejor. –

Respuesta

Cuestiones relacionadas