【发布时间】:2011-11-05 01:23:05
【问题描述】:
我已经设法将电影的视频轨道逐帧加载到带有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-initializer,它需要NSData。此外,我认为这不是我案例的最佳选择,因为据我了解,必须为每个新的音频样本块创建一个新的 AVAudioPlayer-instance。
还有其他建议吗?
播放我从AVAssetReaderTrackOutput 获得的原始音频样本的最佳方式是什么?
【问题讨论】:
-
你有没有得到任何地方?
-
我的解决方案是用 AVAssetReader 打开电影以获取 OpenGL 的帧,同时用 AVAudioPlayer 再次打开同一个电影文件,让它们同时启动。这不是一个好的解决方案,但音频和视频非常同步。从那时起,我就没有时间研究更好的解决方案了。
-
我也在使用 AVAudioPlayer 但音频同步不是很好。有一个真正的解决方案会更好。
-
在我的实现中,视频和音频的同步非常好。我在 AVAudioPlayer 上调用 prepare,然后在 AVAudioPlayer 中调用 play,同时开始从视频轨道读取样本。但实际上你是对的,这不是设计同步的,尽管它对我来说效果很好。
-
尝试使用 iPhone 5 在混合光照条件下拍摄,您会立即看到使用此方法的视频和音频之间的一些正确同步问题。
标签: ios opengl-es ios4 avaudioplayer avfoundation