如何组播使用DirectShow捕获的流?

时间:2008-12-11 22:22:48

标签: c# video streaming directshow multicast

我需要构建一个非常简单的流媒体服务器。它需要能够从设备捕获视频,然后通过多播将该视频流式传输到LAN上的多个客户端。

由于某人使用DirectShow.Net(http://www.codeproject.com/KB/directx/directxcapture.aspx)编写的库,因此捕获部分非常简单(在C#中)。

我现在的问题是如何组播这个?这是我坚持的部分。我不知道下一步该怎么做,或者采取什么步骤。

3 个答案:

答案 0 :(得分:2)

没有可以插入和使用的过滤器。

你需要在这里做三件事:

  1. 将视频压缩为MPEG2或MPEG4
  2. 将其复制到MPEG传输流
  3. 广播
  4. 第1部分有很多编解码器,有些设备甚至可以输出压缩视频。

    第3部分也很简单。

    主要问题在于第2部分,因为MPEG传输流已获得专利。它是许可的,因此您无法开发基于它的免费软件(VLC和FFMPEG违反该许可证),您只需支付数百美元即可获得规范副本。

    如果你需要开发它,你需要:

    • 获取ISO / IEC 13818-1-2000的副本(您可以从他们的网站下载PDF),它描述了MPEG传输流
    • 开发一个渲染器过滤器,它采用MPEG Elementary Streams并将它们复用到传输流

    它必须是渲染器,因为传输流不是变换过滤器。需要定期发送某种带外数据(程序分配表和参考时钟),并且需要保留工作线程来执行此操作。

答案 1 :(得分:1)

要实现这一点,您需要设置/编写某种视频流服务器。

我在项目中使用VideoCapX用于相同的目的。文档和支持不是一流的,但它已经足够好了。它使用的是WMV流媒体技术。该流称为MMS流。您可以使用任何大多数媒体播放器查看它。我已经使用Windows Media Player,Media Player Classics和VLC进行了测试。如果您希望在没有编写任何代码的情况下看到它的功能,请查看U-Broadcast,它使用VideoCapX来完成幕后工作。

我已经使用DirectShow.Net近两年了,由于DirectShow技术的复杂性,我仍然觉得很难自己编写流媒体服务器。

除了WMV,您可以查看Helix Server或Apple Streaming Server。后者不是免费的,微软的WMV Streaming Server也是免费的。

您还可以查看VLC或Windows Media Encoder直接从应用程序进行流式传输。但到目前为止,我发现U-Broadcast可以完成上述两项工作。 VLC与编解码器和非VLC播放器的播放有一些兼容性问题,WME在启动捕获设备时遇到问题。

祝你好运

注意:我与VideoCapX或它的公司无关,我只是一个快乐的用户。

答案 2 :(得分:0)

http://www.codeproject.com/KB/directx/DShowStreamingServer.aspx可能会有所帮助,http://en.wikipedia.org/wiki/VLC_media_player#cite_note-14

VLC也“应该”能够从本地传输任何设备。