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

标签 ios opengl-es ios4 avaudioplayer avfoundation

我已经设法使用 AVFoundation 将电影的视频轨道逐帧加载到 OpenGL 纹理中。我按照此处答案中描述的步骤操作:iOS4: how do I use video file as an OpenGL texture? 并从 WWDC2010GLVideoFrame 示例中提取了一些代码,可以下载 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 组合。您可以将时间同步的多个媒体源合并到一个输出中。

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

关于ios - AVFoundation:视频到 OpenGL 纹理工作 - 如何播放和同步音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214074/

相关文章:

html - 从本地存储在 Xcode 中的 htm 文件中提取原始 html 字符串

ios - View 未完全释放

java - 如何在 Android 上使用 OpenGL ES 扩展

opengl-es - 在 OpenGLES 中让 Sprite 正确面对相机

iphone - 开发者拒绝状态?

ios - 如何使用 Alamofire 像 Postman 一样发送表单数据

ios - 禁用 MT.Dialog 中的按钮并更改图像

iphone - 如何使用GPUImage框架复制CIRandomGenerator

objective-c - 启动画面后 iPhone 应用程序崩溃

objective-c - 如何实现 UIImageView 的对齐网格功能?