Мне удалось загрузить видеодорожку фильма кадр за кадром в текстуру 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
?