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

Ios AVFoundation:视频到OpenGL纹理工作-如何播放和同步音频?,ios,opengl-es,ios4,avaudioplayer,avfoundation,Ios,Opengl Es,Ios4,Avaudioplayer,Avfoundation,我已经设法用AVFoundation将电影的视频轨迹逐帧加载到OpenGL纹理中。我按照以下答案中描述的步骤进行操作: 并从WWDC2010的GLVideoFrame示例中获取了一些代码,可以下载 如何与视频同步播放电影的音频曲目?我认为在单独的播放器中播放它不是一个好主意,而是使用相同的AVAsset的音轨 AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 我通

我已经设法用
AVFoundation
将电影的视频轨迹逐帧加载到
OpenGL
纹理中。我按照以下答案中描述的步骤进行操作: 并从
WWDC2010
GLVideoFrame
示例中获取了一些代码,可以下载

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

AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
我通过在CADisplayLink回调中检索视频帧及其时间戳

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

如何获取相应的音频样本? 怎么玩呢


编辑:

我环顾了一下四周,我认为最好使用
AudioToolbox.framework中的
AudioQueue
,方法如下:

AVFoundation
AVAudioPlayer
中还有一个音频播放器。但我不知道应该如何将数据传递给它的
initWithData
-初始值设定项,它需要
NSData
。此外,我认为这不是我的案例的最佳选择,因为据我所知,必须为每个新的音频样本块创建一个新的
AVAudioPlayer
-实例

还有其他建议吗?
播放我从
AVAssetReaderTrackOutput
中获得的原始音频样本的最佳方式是什么?

您想要进行AV合成。您可以将多个临时同步的媒体源合并到一个输出中


你有过这样的经历吗?我的解决方案是用Avassetrader打开电影,为OpenGL抓取帧,同时用AVAudioPlayer再次打开同一个电影文件,让两者同时启动。这不是一个很好的解决方案,但音频和视频是相当同步的。从那以后,我没有时间去研究更好的解决方案。我也在使用AVAudioPlayer,但是音频同步不是很好。有一个真正的解决方案会更好。在我的实现中,视频和音频是相当好的同步。我在AVAudioPlayer上调用prepare,然后在AVAudioPlayer中调用play,同时开始从视频曲目中读取样本。但事实上你是对的,这不是设计上的同步,尽管它对我来说效果很好。试着用iPhone 5在混合光线条件下拍摄,你会立即看到使用这种方法在视频和音频之间存在一些适当的同步问题。