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


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

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


Редактировать:

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

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

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


16


источник


Ответы:


Вы хотите сделать композицию AV. Вы можете объединить несколько источников мультимедиа, синхронизированных временно, в один вывод.

http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVComposition_Class/Reference/Reference.html


1