DirectShow的新功能(如4天内)。我有一个filtergraph工作和代码编写,让我选择一个摄像头,设置它的分辨率,预览它的视频,使用XVID编解码器压缩它并将其保存到AVI文件。
如何将帧作为字节数组获取,因为它们来自图中的视频压缩器过滤器?
我需要将压缩帧保存到视频帧与其他科学数据混合的文件中。
正在使用的文件格式是HDF5,相机帧需要与收到的其他科学乐器的帧交错,这样它们才能按照收到的顺序播放。我有这个适用于所有设备,除了网络摄像头。
为了播放,我需要从数据文件中的一个流中提供FilterGraph。对此提出任何建议也是受欢迎的!
提前致谢!
答案 0 :(得分:1)
DirectShow过滤器与对等过滤器或内部句柄交换数据,设计行为是无法获取数据流,至少以统一的方式。更多相关信息:Data Flow in the Filter Graph。
多年来,Sample Grabber Filter一直是最受欢迎的方法,可以在管道中感兴趣的位置外部访问数据。关于如何使用Sample Grabber,有很多代码片段,包括StackOverflow。遗憾的是,它在最近的(服务器?)操作系统中不再可用,但旧的SDK在源代码中有Sample Grabber的变体。我相信你可以用它来获得压缩字节。
为了播放,我需要从数据文件中的一个流中提供FilterGraph。对此提出任何建议也是受欢迎的!
要回放数据,您需要从一种标准容器格式中流式传输数据,在这种情况下,您可以利用现有的过滤器,或者您可以自己将数据注入DirectShow管道。对于后者,您需要一个自定义过滤器,因为我从一开始就提到它只是与其他过滤器交换数据的过滤器,而不是控制更高级别的代码。 Push Source Filters Sample是那些走自定义过滤器路径的人的典型起点。也许你可以更好地简单地将数据写入AVI然后从那里阅读(播放)。