使用DirectShow和Windows Media Format SDK进行实时流式传输

时间:2009-04-24 18:28:41

标签: streaming directshow asf

首先,一些背景:
我正在开发Silverlight 3应用程序,并希望添加对实时流媒体的支持(网络摄像头+麦克风作为输入)。遗憾的是,Silverlight无法访问网络摄像头或麦克风本身,因此我需要创建一个独立的应用程序来建立媒体流。我想Silverlight最适合使用Microsoft技术,所以我想使用带有WMV / WMA编码的ASF格式。

在做了一些研究后,我认为我可以做到:

  • 似乎可以使用DirectShow捕获网络摄像头和麦克风输入,然后将其合并为一个“流”。
  • 要对流进行编码,我可能需要将其传递给Windows Media Format SDK库(MSDN文档描述了如何将DirectShow与WM ASF Writer一起使用)。
  • 我认为应该可以使用类似“网络接收器”的东西来广播ASF流(而不是将其写入硬盘)。
  • 我想将大量客户端连接到流上的带宽非常大,所以我应该将流发送到服务器并从那里广播。我只是不知道是否可以使用ASF Reader / Writer的组合来通过服务器“传递”流。我也不知道是否可以使用多播来获得类似的结果。

我打算使用C#,虽然这可能没什么区别,因为我必须使用一些C ++库的包装器(比如DirectShow.Net或SlimDX)。

不幸的是,我几乎没有处理媒体流的经验。所以我的第一个问题是,是否有可能以我描述的方式进行流式传输?

如果有可能,这是一种明智的方式,还是应该考虑使用一些不同的库/框架?

1 个答案:

答案 0 :(得分:1)

虽然使用DShow和/或WMF SDK会给你最大的灵活性,如果你的唯一目标是将视频/音频流式传输到Silverlight,你可以使用类似Windows Media Encoder 9的东西,或者你可以使用新的Expression Encoder 。两者都支持将实时网络摄像头和麦克风流式传输到Windows Media Server发布点,或者它可以在本地端口上托管流。两者都有一个可通过.NET获得的SDK(WME使用COM互操作,Encoder具有原生.NET API)此流与Silverlight和Windows Media Player兼容。