AVFoundation:视频到OpenGL纹理工作 - 如何播放和同步音频?

时间:2011-08-27 10:55:03

标签: ios opengl-es ios4 avaudioplayer avfoundation

我设法将一帧电影的视频轨道逐帧加载到OpenGL纹理中AVFoundation。我按照答案中描述的步骤进行了操作:iOS4: how do I use video file as an OpenGL texture? 并从GLVideoFrame的{​​{1}}样本中获取了一些代码,可以下载here

如何与视频同步播放电影的音轨?我认为在单独的播放器中播放它并不是一个好主意,而是使用相同WWDC2010的音轨。

AVAsset

我通过

检索了一个videoframe及其在CADisplayLink回调中的时间戳
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];

其中CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer]; CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer ); 的类型为readerOutput

如何获取相应的音频样本? 以及如何玩它们?


编辑:

我看了一下,我认为,最好使用AVAssetReaderTrackOutput*中的AudioQueue,使用此处描述的方法:AVAssetReader and Audio Queue streaming problem

AudioToolbox.frameworkAVFoundation中还有一个音频播放器。但我不确切地知道应该如何将数据传递给AVAudioPlayer - 初始化程序,它需要initWithData。此外,我认为这不是我的最佳选择,因为我必须为每个新的音频样本块创建一个新的NSData - 实例。

还有其他建议吗? 从AVAudioPlayer获取原始音频样本的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

你想做AV合成。您可以将多个媒体源(暂时同步)合并到一个输出中。

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