AVFoundation: Работа с видео в текстуре OpenGL - Как воспроизводить и синхронизировать аудио? - PullRequest
16 голосов
/ 27 августа 2011

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

1 Ответ

2 голосов
/ 10 апреля 2012

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

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

...