AVFoundation: Работа с текстурой из видео в OpenGL - Как воспроизводить и синхронизировать звук?

Мне удалось загрузить видеодорожку фильма кадр за кадром в текстуру OpenGL с помощью AVFoundation . Я выполнил шаги, описанные в ответе здесь: iOS4: как использовать видеофайл в качестве текстуры OpenGL? и взял код из образца GLVideoFrame из WWDC2010 , который можно скачать здесь .

Как мне воспроизводить звуковую дорожку фильма синхронно, чтобы видео? Я думаю, что было бы не хорошей идеей проигрывать его в отдельном проигрывателе, а использовать аудиодорожку того же AVAsset .

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

Я получаю видеокадр и его временную метку в callback-функции CADisplayLink via

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

, где readerOutput имеет тип AVAssetReaderTrackOutput *

Как получить соответствующие аудио-сэмплы? И как их воспроизвести?


Edit:

Я немного огляделся и думаю, что лучше всего было бы использовать AudioQueue из AudioToolbox.framework с помощью подход, описанный здесь: AVAssetReader и проблема потоковой передачи аудио-очереди

В AVFoundation также есть аудиоплеер: AVAudioPlayer . Но я не знаю точно, как передать данные его initWithData -инициализатору, который ожидает NSData . Более того, я не думаю, что это лучший выбор для моего случая, потому что новый AVAudioPlayer -экземпляр должен быть создан для каждого нового фрагмента аудиосэмплов, насколько я понимаю.

Любые другие предложения ? Как лучше всего воспроизводить необработанные образцы аудио, которые я получаю из AVAssetReaderTrackOutput ?

16
задан Amir A. Shabani 29 May 2019 в 04:46
поделиться