在Windows开发中,GStreamer还是DirectShow更好?

17
我正在为当地一所大学实施一个讲座录制项目。多个视频流将到达一台计算机:演示者的桌面幻灯片、演示者本人的视频摄像头图像,以及可选的数字白板捕获。这些传入的流将由一个桌面应用程序管理,该应用程序显示、转码/混合并最终将它们保存到磁盘。由于材料可以以各种方式分发,因此将有一些配置选项:作为DVD上的Flash应用程序、作为在线Flash应用程序或作为Windows Media Player的点播流。
此应用程序应在Windows上运行。可选地,它可以支持其他平台,但似乎不是高优先级。
GStreamer和DirectShow似乎都能提供底层技术。我在Linux上有一点使用GStreamer的经验,并且我喜欢它的设计,因此我倾向于在这个项目中使用它。然而,我不知道它在Windows上的支持情况。我找不到任何关于如何在Windows上构建GStreamer的最近文档。所以我担心我会在这个过程中被卡住。
DirectShow似乎是一个更安全的选择,因为它被广泛使用,在互联网上有更多的文档可用。
这里有没有人有在Windows上使用GStreamer的经验?它运行良好吗?我应该注意哪些问题?
编辑: 我发现了GStreamer OSSBuilds网站,并能够快速实现一个简单的视频播放器(基于“playbin”元素)。因此,我想进一步探索GStreamer的路径。

@Macke 请看我在回复中的内容。 - StackedCrooked
4个回答

14

好的,我会自己回答这个问题。简单的答案是:GStreamer! 我迄今为止没有遇到任何困难。要在Windows上使用它,您需要使用 GStreamer Winbuilds

更新(六个月后)

实际上,在这个赌注上我有点冒险。项目后期客户指定要支持WMV9编解码器(VC-1)。由于WMV9编码器仅在微软平台上受支持,因此无法在基于GStreamer的解决方案中实现。因此,也许DirectShow将是正确的选择。


为什么他们要求使用WMV9呢?几乎在所有方面,H.264都更好;质量,压缩,跨平台支持等等。无论如何,不要轻易放弃GStreamer!实现一个WMV9编解码器的GStreamer包装器并不难。然后您仍然可以保持代码的可移植性,并在必要时支持其他编解码器。 - gavinb
@gavinb,我曾经考虑为GStreamer编写WMV9包装器。然而,由于各种原因,那份工作的氛围迅速恶化,以至于我只好逃离那个地方。现在我已经在另一个地方愉快地工作了将近半年。 - StackedCrooked
2
FFmpeg有一个WMV9插件。GStreamer的元素是ffenc_wmv3。 - Jonathan Henson
2
请问您如何使用gstreamer获取捕获设备?到目前为止,我查看的所有解决方案(如VLC、ffmpeg等)都是在DirectShow API之上编码的高级解决方案,用于记录Windows上传入的视频数据,但是gstreamer似乎没有与其连接。因此,我不确定要使用哪个元素作为数据源-有什么建议吗? - Johansensen

8

上一次我在Windows上使用GStreamer非常繁琐。

如果您选择这种方式,您需要愿意花费大量时间处理运行时错误和其他编译问题。首先,您需要评估要使用哪个编译器/运行时。

如果可移植性不是必须的,我会选择简单的DirectShow。


1
几个小时前,我发现了一个发布GStreamer Windows版本的网站:http://www.gstreamer-winbuild.ylatuya.es/doku.php。我能够快速实现一个基于“playbin”的简单视频播放器。看起来这些版本可能会消除许多烦恼。 - StackedCrooked
是的,那是Visual Studio选项。如果您不需要使用任何其他已编译的gstreamer库(如fluendo插件等),这将是可以接受的,因为它们可能会针对其他运行时进行编译。 - Fernando N.

5

考虑使用VLC。 http://www.videolan.org/ 我赞同fnieto关于在Windows上使用GStreamer编译困难的说法(最近刚做了这个)。但是如果您熟悉Unix环境,Cygwin或MSYS可能不会带来太大麻烦。但请注意,在Windows上使用GStreamer可能无法像使用Media Foundation或DirectShow一样获得可靠的硬件支持。Microsoft Media Center iTV框架也值得一看。


1

Avisynth 可能提供简单的流混合,并且可以接受 DirectShow 输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接