Мне удалось загрузить видео-трек фильма кадр за кадром в текстуру OpenGL
с AVFoundation
.Я выполнил шаги, описанные в ответе здесь: iOS4: как использовать видеофайл в качестве текстуры OpenGL? и взял некоторый код из образца GLVideoFrame
из WWDC2010
, который можно загрузить здесь .
Как воспроизвести звуковую дорожку фильма синхронно с видео?Я думаю, что было бы неплохо воспроизвести его в отдельном проигрывателе, но использовать аудиодорожку того же AVAsset
.
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
Я получаю видеокадр и его метку времени в CADisplayLink.обратный вызов через
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
, где readerOutput
имеет тип AVAssetReaderTrackOutput*
Как получить соответствующие аудиосэмплы?И как их играть?
Редактировать:
Я немного осмотрелся и думаю, лучше всего было бы использовать AudioQueue
из AudioToolbox.framework
, используя подходздесь описано: Проблема потоковой передачи AVAssetReader и Audio Queue
В AVFoundation
также есть аудиопроигрыватель: AVAudioPlayer
.Но я не знаю точно, как мне передать данные в его initWithData
-инициализатор, который ожидает NSData
.Кроме того, я не думаю, что это лучший выбор для моего случая, потому что для каждого нового куска аудиосэмплов должен быть создан новый AVAudioPlayer
-экземпляр, насколько я понимаю.
Есть еще какие-нибудь предложения?Какой лучший способ воспроизвести необработанные аудиосэмплы, которые я получаю с AVAssetReaderTrackOutput
?