我已经设法使用 AVFoundation
将电影的视频轨道逐帧加载到 OpenGL
纹理中。我按照此处答案中描述的步骤操作:iOS4: how do I use video file as an OpenGL texture?
并从 WWDC2010
的 GLVideoFrame
示例中提取了一些代码,可以下载 here .
如何与视频同步播放电影的音轨?我认为在单独的播放器中播放它不是一个好主意,而是使用相同 AVAsset
的音轨。
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
我在 CADisplayLink 回调中检索了一个视频帧和它的时间戳
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
其中 readerOutput
的类型为 AVAssetReaderTrackOutput*
如何获取对应的音频样本? 怎么玩?
编辑:
我环顾四周,我认为,最好的办法是使用 AudioToolbox.framework
中的 AudioQueue
,使用此处描述的方法:AVAssetReader and Audio Queue streaming problem
AVFoundation
中还有一个音频播放器:AVAudioPlayer
。但我不知道我应该如何将数据传递给它的 initWithData
- 初始化器,它需要 NSData
。此外,我认为这不是我的最佳选择,因为据我所知,必须为每个新的音频样本 block 创建一个新的 AVAudioPlayer
实例。
还有其他建议吗?
播放从 AVAssetReaderTrackOutput
获得的原始音频样本的最佳方式是什么?
最佳答案
您想做一个 AV 组合。您可以将时间同步的多个媒体源合并到一个输出中。
关于ios - AVFoundation:视频到 OpenGL 纹理工作 - 如何播放和同步音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214074/