【问题标题】:AVFoundation: Video to OpenGL texture working - How to play and sync audio?AVFoundation:视频到 OpenGL 纹理工作 - 如何播放和同步音频?
【发布时间】:2011-11-05 01:23:05
【问题描述】:

我已经设法将电影的视频轨道逐帧加载到带有AVFoundationOpenGL 纹理中。我按照这里的答案中描述的步骤操作: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

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

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

【问题讨论】:

  • 你有没有得到任何地方?
  • 我的解决方案是用 AVAssetReader 打开电影以获取 OpenGL 的帧,同时用 AVAudioPlayer 再次打开同一个电影文件,让它们同时启动。这不是一个好的解决方案,但音频和视频非常同步。从那时起,我就没有时间研究更好的解决方案了。
  • 我也在使用 AVAudioPlayer 但音频同步不是很好。有一个真正的解决方案会更好。
  • 在我的实现中,视频和音频的同步非常好。我在 AVAudioPlayer 上调用 prepare,然后在 AVAudioPlayer 中调用 play,同时开始从视频轨道读取样本。但实际上你是对的,这不是设计同步的,尽管它对我来说效果很好。
  • 尝试使用 iPhone 5 在混合光照条件下拍摄,您会立即看到使用此方法的视频和音频之间的一些正确同步问题。

标签: ios opengl-es ios4 avaudioplayer avfoundation


【解决方案1】:

你想做一个 AV 作曲。您可以将多个媒体源在时间上同步到一个输出中。

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

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多