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