我已经成功地将一帧电影的视频轨道逐帧加载到AVFoundation的OpenGL纹理中。我也跟着在这里的答案中描述的步骤:iOS4: how do I use video file as an OpenGL texture? 并采取了一些代码从WWDC2010的GLVideoFrame样品可以在这里下载:http://bit.ly/cEf0rMAVFoundation:视频到OpenGL纹理工作 - 如何播放和同步音频?
如何播放音频轨的电影同步到视频。我认为在单独的播放器中播放它不是一个好主意,但要使用相同的AVAsset
的音轨。
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
我检索videoframe并通过
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
的时间戳在CADisplayLink回调,其中readerOutput
类型为AVAssetReaderTrackOutput*
如何获得相应的音频样本的? 以及如何发挥他们?
编辑:
我四处张望了一下,我认为,最好是使用这里介绍的方法使用AudioQueue
从AudioToolbox.framework:AVAssetReader and Audio Queue streaming problem
还有一个AVFoundation中的音频播放器:AVAudioPlayer
。但我不知道我应该如何将数据传递给initWithData
- 初始化程序,它需要NSData
。此外,我不认为这是我的情况的最佳选择,因为我知道每个新音频样本都需要创建一个新的AVAudioPlayer
- 实例。
其他建议? 播放从AVAssetReaderTrackOutput
得到的原始音频样本的最佳方式是什么?
你有没有得到过这个地方? – RyanSullivan
我的解决方案是用AVAssetReader打开电影来抓取OpenGL的帧,同时用AVAudioPlayer再次打开同一个电影文件,并让它们同时启动。这不是一个好的解决方案,但音频和视频非常同步。从那时起,我没有时间去寻找更好的解决方案。 – j00hi
我也在使用AVAudioPlayer,但音频同步不是很好。有一个真正的解决方案会更好。 –