2017-10-10 89 views
0

最近,我使用Apple Core Audio C++ API完成了音频解码任务。OSX Native API视频解码C++

现在我有兴趣使用C++(Windows操作系统上的DirectShow或Media Foundation的模拟)与本地OSX API再次解码和获取视频文件帧的原始未压缩数据。

我已经看过可用的API(AVFoundation,Core Video等),但找不到可以完成这项工作的框架,并且可以通过C++访问。

所以我的问题是最适合这个任务的框架?

回答

1

您可以使用AVFoundationAVAssetReader从文件中读取原始视频数据。

您创建一个AVAssetReader,添加AVAssetReaderTrackOutputnil输出设置,然后调用copyNextSampleBuffer()直到完成。

但是,除非你有非常特殊的需求,否则你不可能找到非常有用的原始编解码器视频数据。你想要显示视频吗?在这种情况下,AVPlayerLayer/AVPlayerAVFoundation再次)可能是你正在寻找的。如果你想要更低的水平,CoreMedia/VideoToolbox可能适合你。 AVFoundation是一个客观的c框架,因此您将使用objective-C++,而CoreMediaVideoToolbox是C框架。

+0

感谢您的回答。我不得不把这个项目搁置一段时间,现在我正在重新开始我的工作。我只需要逐帧获取像素的原始未压缩rgb值。我想对视频执行自定义过滤器(我自己实现的过滤器),所以原始像素数据正是我需要从输入文件获得的数据。我会尝试一下你的建议,并让你知道结果。谢谢。 – mbaros

+1

啊,对于需要传递非零选项的帧数据,指定rgba(可能)。我可以更新我的答案。 –

+0

那太棒了。谢谢 – mbaros