繁体   English   中英

如何在directshow中开发视频组合器/构建器过滤器

[英]How to develop a video combiner/builder filter in directshow

我正在尝试构建一个过滤器。 它应该有3个视频输入和1个音频输入,并根据固定的架构构建一个vido文件。 此模式的一个示例可能是:“播放第一个源的3秒;然后播放第二个源的3秒;播放第三个源的3秒;重复”

网上有一些关于如何构建过滤器的教程,但我有一些问题:

为这个项目使用变换过滤器基类是否正确?

我需要创建自定义pinclasses吗?

在哪个函数中,来自源的实际视频传递到过滤器,我可以抓住它?

如何在引脚之间进行某种同步?

假设我只有一个来源:我可以将输入样本的值复制到输出样本吗?

如何将数据发送到输出引脚?

为此项目使用转换过滤器基类是否正确?

不,这里解释: DirectShow过滤器:转换

我需要创建自定义pinclasses吗?

最有可能的。 您需要媒体类型检查,然后您需要将数据传递到过滤器类,并标识接收到的引脚。

在哪个函数中,来自源的实际视频传递到过滤器,我可以抓住它?

您拥有数据的最早点是类中输入的IPin::Receive方法。

如何在引脚之间进行某种同步?

这完全取决于您:您应该实现一种输入队列,然后匹配来自输入队列的数据以产生输出。 如果您希望它们等到其他输入流保持并提供其数据,您有责任阻止对引脚的执行。

假设我只有一个来源:我可以将输入样本的值复制到输出样本吗?

输入和输出数据作为媒体样本 - 属于分配器的对象。 实际复制取决于引脚分配器是相同还是不同,后者是否兼容。 总而言之,是的,你可以复制数据。

如何将数据发送到输出引脚?

CBaseOutputPin::Deliver可以实现这一点(实际上调用连接下游引脚的IPin::Receive )。

为什么你需要一个自己的过滤器呢? 使用DirectShowEditingServices,您可以拥有完整的基础架构来构建播放列表和所有内容。 但这仅适用于文件源。

要使用Live-sources,最好的解决方案是GMFBridge 在这里,您可以为源创建1到N个图形,并为您创建一个回放/捕获图形。 然后在GMFBridge中,您可以将连接从源切换到回放图形。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM