2011-08-27 15 views
16

Udało mi się załadować ścieżkę wideo klatki po klatce do tekstury OpenGL z AVFoundation. Śledziłem czynności opisane w odpowiedzi tutaj: iOS4: how do I use video file as an OpenGL texture? i wziął trochę kodu z próbki GLVideoFrame od WWDC2010, który można pobrać tutaj: http://bit.ly/cEf0rMAVFoundation: Obsługa wideo w OpenGL - Jak odtwarzać i synchronizować dźwięk?

Jak odtwarzać audio-track filmu synchronicznie do filmu. Myślę, że nie byłoby dobrym pomysłem zagrać w osobnym odtwarzaczu, ale użyć ścieżki dźwiękowej tego samego AVAsset.

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

ja pobrać videoframe i to datownik w CADisplayLink-zwrotnego poprzez

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

gdzie readerOutput jest typu AVAssetReaderTrackOutput*

Jak zdobyć odpowiednie muzyki z próbki? A jak je odtwarzać?


Edit:

Mam rozejrzał się trochę i myślę, że najlepiej byłoby użyć AudioQueue z AudioToolbox.framework stosując podejście opisane tutaj: AVAssetReader and Audio Queue streaming problem

Istnieje również odtwarzacz audio w AVFoundation: AVAudioPlayer. Ale nie wiem dokładnie, w jaki sposób powinienem przekazać dane do jego wszczepu, który oczekuje NSData. Ponadto nie sądzę, że jest to najlepszy wybór w moim przypadku, ponieważ nowa instancja musi zostać stworzona dla każdego nowego kawałka próbek audio, jak rozumiem.

Jakieś inne sugestie? Jaki jest najlepszy sposób odtwarzania surowych próbek audio, które otrzymuję od AVAssetReaderTrackOutput?

+0

Czy zdarzyło Ci się kiedykolwiek to osiągnąć? – RyanSullivan

+0

Moje rozwiązanie polegało na tym, aby otworzyć film za pomocą AVAssetReader, aby pobrać klatki dla OpenGL, a jednocześnie ponownie otworzyć ten sam plik filmowy za pomocą AVAudioPlayer i pozwolić, aby oba zostały uruchomione jednocześnie. To nie jest dobre rozwiązanie, ale audio i wideo są dość zsynchronizowane. Od tego czasu nie miałem czasu pracować nad lepszym rozwiązaniem. – j00hi

+0

Używam również AVAudioPlayer, ale synchronizacja dźwięku nie jest dobra. Posiadanie prawdziwego rozwiązania byłoby lepsze. –

Odpowiedz

Powiązane problemy