如何在C#中混合两个视频流?

时间:2009-08-26 05:54:11

标签: c# video video-processing

过去我使用Managed Direct X和DirectShow.Net在简单网格上的纹理上播放视频。然后我使用相同的技术将多个视频源组合成单个纹理,使用通过纹理公开的各种功能将这些流混合在一起。这是一个非常有趣的实验2年前,当Managed Dirext X仍在开发和支持(不再是)以及与DirectShow.Net类似时非常适合用于此目的 - 它似乎没有更新自2007年7月以来。

我希望再次冒险进入这个领域,并想知道如何在C#中完成这项工作,而不使用折旧或报废的API以及如何最好地接近它。

5 个答案:

答案 0 :(得分:3)

在WPF中很容易做到。

使用两个MediaElement控件,一个在另一个之上,并使上面的50%透明。

但是,我认为不可能将其保存到新视频中

答案 1 :(得分:2)

您可以使用与MDX和DirectShow几乎相同的SlimDX开源库,并在win7.0中也支持vista

答案 2 :(得分:1)

我今天遇到的另一个选择可能是AForge.net - 它包含播放视频的命名空间。 http://www.aforgenet.com/framework/samples/video.html并根据LGPL许可证发布。

答案 3 :(得分:1)

另一个选项是OpenTK;用于混合视频流提供的帧: http://www.opentk.com/doc/graphics

答案 4 :(得分:0)

我在2003年左右做到了这一点。我不得不使用不安全的代码,换句话说,指针将两个视频流中的每个图像帧COPIED转换为RGB格式并平均每个像素值,然后转换回原始格式。如果您不使用不安全的代码,性能影响是如此巨大。我的理解是,在处理视频流时,DirectShow通过自动对齐许多编解码器来完成这项工作。同时,这些图像流必须是线程安全的并且正确同步,这意味着很多开销。但是那些了解得更好的人应该加入进来。