最近,我使用Apple Core Audio C++ API完成了音频解码任务。OSX Native API视频解码C++
现在我有兴趣使用C++(Windows操作系统上的DirectShow或Media Foundation的模拟)与本地OSX API再次解码和获取视频文件帧的原始未压缩数据。
我已经看过可用的API(AVFoundation,Core Video等),但找不到可以完成这项工作的框架,并且可以通过C++访问。
所以我的问题是最适合这个任务的框架?
最近,我使用Apple Core Audio C++ API完成了音频解码任务。OSX Native API视频解码C++
现在我有兴趣使用C++(Windows操作系统上的DirectShow或Media Foundation的模拟)与本地OSX API再次解码和获取视频文件帧的原始未压缩数据。
我已经看过可用的API(AVFoundation,Core Video等),但找不到可以完成这项工作的框架,并且可以通过C++访问。
所以我的问题是最适合这个任务的框架?
您可以使用AVFoundation
的AVAssetReader
从文件中读取原始视频数据。
您创建一个AVAssetReader
,添加AVAssetReaderTrackOutput
与nil
输出设置,然后调用copyNextSampleBuffer()
直到完成。
但是,除非你有非常特殊的需求,否则你不可能找到非常有用的原始编解码器视频数据。你想要显示视频吗?在这种情况下,AVPlayerLayer
/AVPlayer
(AVFoundation
再次)可能是你正在寻找的。如果你想要更低的水平,CoreMedia
/VideoToolbox
可能适合你。 AVFoundation
是一个客观的c框架,因此您将使用objective-C++,而CoreMedia
和VideoToolbox
是C框架。
感谢您的回答。我不得不把这个项目搁置一段时间,现在我正在重新开始我的工作。我只需要逐帧获取像素的原始未压缩rgb值。我想对视频执行自定义过滤器(我自己实现的过滤器),所以原始像素数据正是我需要从输入文件获得的数据。我会尝试一下你的建议,并让你知道结果。谢谢。 – mbaros
啊,对于需要传递非零选项的帧数据,指定rgba(可能)。我可以更新我的答案。 –
那太棒了。谢谢 – mbaros