用于 C#/Silverlight/.NET 音频/视频实时流的跨平台开放库
我正在寻找一个用于将会议音视频流传输到服务器的库,该库多播到所有其他客户端。我研究过 SIP 和 openh323,两者似乎都过于专门用于 VoIP 电话。
我希望该应用程序成为跨平台 Silverlight 应用程序(Mac 和 Windows),所以我认为我不能使用 DirectSound,对吗?
提前致谢。
I'm looking for a library for conference a/v streaming to a server, which multicasts to all other clients. I've looked at SIP and openh323, and both seem too specialized for voip telephony.
I want the app to be a cross platform Silverlight application (mac and windows), so I don't think I can use DirectSound, right?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题中可能混合了苹果和橙子。 DirectSound提供了用于访问声卡的API; H.323 和 SIP 是呼叫标准。
Silverlight 4 本身提供了几个大致相当于 DirectSound 的简化 API,以便您可以访问麦克风、声卡和网络摄像头。请参阅 http://msdn.microsoft.com/en-us /library/ff602282(VS.95).aspx 了解一些详细信息。
但是一旦获得声音,您仍然需要对其进行编码、传输、混合、分发,然后接收。这就是事情变得复杂的地方。 Flash 本身就支持这一切; Silverlight 没有。目前最好的开源实现是由 SocketCoder 组合而成,可在 CodePlex 上找到,但它使用专有的信令/流协议、专有且效率非常低的视频编解码器以及专有的媒体服务器。
据我所知,在 Silverlight 中执行您想要的操作的最佳选择是 流编码器。它不是开源的,但它支持一组合理的开放标准,这意味着您可能能够使用第三方开源媒体服务器。当然,您需要进行测试以确保它是您所需要的。
或者,您可以尝试将任何各种开源解决方案移植到 C#。我已经使用 Speex 预处理器完成了此操作:它很复杂,但并不像您想象的那么困难。您可能可以使用 openH323 和现有的各种基于 C 的编解码器执行类似的操作。您甚至可以尝试修改 FluorineFx (http://www.fluinefx.com/) 的 Silverlight RTMP 实现来完成您需要做的事情。当然,这一切都不会简单。
You may be mixing apples and oranges in your question. DirectSound provides an API for accessing sound cards; H.323 and SIP are standards for making a call out.
Silverlight 4 natively provides a couple of simplified APIs that are roughly equivalent to DirectSound, so that you can access the microphone, sound card and webcams. See http://msdn.microsoft.com/en-us/library/ff602282(VS.95).aspx for some details.
But once you've got the sound, you still need to encode it, transmit it, mix it, distribute it, and then receive it. That's where it gets complicated. Flash has support for all this natively; Silverlight doesn't. The best open source implementation right now for doing this was put together by SocketCoder and is available on CodePlex, but it uses a proprietary signaling/streaming protocol, a proprietary and very inefficient video codec, and a proprietary media server.
From what I can tell, the best option for doing what you want in Silverlight is a closed-source solution provided by StreamCoders. It's not open-source, but it supports a reasonable set of open standards, which means that you'd probably be able to use a third-party open-source media server. You'd want to test to make sure that it's what you need, of course.
Alternatively, you can try your hand at porting any of the various open-source solutions to C#. I've done this with the Speex pre-processor: it's complicated, but not as difficult as you'd think. You could presumably do something similar with openH323 and the various C-based codecs that are out there. You might even try your hand at modifying the Silverlight RTMP implementation by FluorineFx (http://www.fluorinefx.com/) to do what you need to do. None of this is likely to be simple, of course.