ios - AVFoundation: Video to OpenGL texture working-¿Cómo reproducir y sincronizar audio?
opengl-es ios4 (1)
He logrado cargar una pista de video de una película fotograma a fotograma en una textura OpenGL
con AVFoundation
. Seguí los pasos descritos en la respuesta aquí: iOS4: ¿cómo uso el archivo de video como una textura OpenGL? y tomó algo de código de la muestra WWDC2010
de WWDC2010
que se puede descargar here .
¿Cómo reproduzco la pista de audio de la película de forma sincronizada con el video? Creo que no sería una buena idea reproducirlo en un reproductor separado, sino utilizar la pista de audio del mismo AVAsset
.
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
Recupero un videoframe y su marca de tiempo en CADisplayLink-callback a través de
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
donde readerOutput
es del tipo AVAssetReaderTrackOutput*
¿Cómo obtener las correspondientes muestras de audio? ¿Y cómo jugarlos?
Editar:
He AudioQueue
alrededor y creo que lo mejor sería usar AudioQueue
de AudioQueue
utilizando el enfoque descrito aquí: AVAssetReader y Audio Queue streaming problem
También hay un reproductor de audio en AVFoundation
: AVAudioPlayer
. Pero no sé exactamente cómo debo pasar los datos a su initWithData
que espera NSData
. Además, no creo que sea la mejor opción para mi caso porque se AVAudioPlayer
crear una nueva AVAudioPlayer
AVAudioPlayer para cada nuevo fragmento de muestras de audio, tal como lo entiendo.
¿Cualquier otra sugerencia? ¿Cuál es la mejor manera de reproducir las muestras de audio sin procesar que obtengo de AVAssetReaderTrackOutput
?
Usted quiere hacer una composición AV. Puede fusionar múltiples fuentes de medios, sincronizadas temporalmente, en una salida.