2011-08-27 11 views
16

Sono riuscito a caricare una traccia video di un filmato fotogramma per fotogramma in una trama OpenGL con AVFoundation. Ho seguito la procedura descritta nella risposta qui: iOS4: how do I use video file as an OpenGL texture? e ha preso un certo codice dal campione GLVideoFrame da WWDC2010 che può essere scaricato qui: http://bit.ly/cEf0rMAVFoundation: lavorazione da video a trama OpenGL - Come riprodurre e sincronizzare l'audio?

Come faccio a giocare la traccia audio del filmato in modo sincrono al video. Penso che non sarebbe una buona idea riprodurlo in un player separato, ma utilizzare la traccia audio dello stesso AVAsset.

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

a recuperare un VideoFrame ed è timestamp nel CADisplayLink-richiamata tramite

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

dove readerOutput è di tipo AVAssetReaderTrackOutput*

Come ottenere i corrispondenti audio-campioni? E come suonarli?


Edit:

Ho guardato un po 'intorno e penso, cosa migliore sarebbe quella di utilizzare AudioQueue dal AudioToolbox.framework utilizzando l'approccio descritto qui: AVAssetReader and Audio Queue streaming problem

C'è anche un lettore audio in AVFoundation: AVAudioPlayer. Ma non so esattamente come dovrei passare i dati al suo initWithData -initializer che si aspetta NSData. Inoltre, non penso che sia la scelta migliore per il mio caso perché dovrebbe essere creata una nuova sostanza AVAudioPlayer per ogni nuova porzione di campioni audio, come ho capito.

Altri suggerimenti? Qual è il modo migliore per riprodurre i campioni audio grezzi che ottengo dallo AVAssetReaderTrackOutput?

+0

Hai mai arrivare ovunque con questo? – RyanSullivan

+0

La mia soluzione era di aprire il film con AVAssetReader per afferrare i frame per OpenGL e, allo stesso tempo, aprire di nuovo lo stesso filmato con un AVAudioPlayer e consentire a entrambi di avviarsi contemporaneamente. Non è una buona soluzione, ma audio e video sono abbastanza sincronizzati. Da allora non ho avuto il tempo di lavorare su una soluzione migliore. – j00hi

+0

Sto anche usando AVAudioPlayer ma la sincronizzazione audio non è molto buona. Avere una soluzione reale sarebbe meglio. –

risposta

Problemi correlati