高性能rtsp服务器

问题描述:

我想要实现一个高性能的rtsp服务器来处理vod请求---它只处理信令请求,它不需要流媒体文件。我已经完成了一个基于Mina网络框架的Java编写的版本,性能似乎不是很高。高性能rtsp服务器

就我所知,高性能的SIP服务器(例如VoIP服务器)是用C编写的(例如OpenSIPS,Kamailo),我应该使用C还是C++来实现我的项目以获得显着的性能改进?

顺便说一句。我找到了OpenSER为什么用C编写的原因的一些解释: “另一方面,它是垃圾收集器,在使用Java开发SIP应用程序时可能会导致很多麻烦,用Java编写的大负载服务器会停止工作垃圾收集器正在清理内存,由垃圾收集器引起的延迟甚至可能超过10秒,这种延迟是不可接受的“ 这是现在的事实,这意味着我也应该使用C吗?

+0

理论上,为了“提高”Java应用程序的性能,应使用其他编程语言(如汇编/ C/C++)优化本地OS中的动态链接库的包装。这可以使用像JNI或JNA这样的Java技术来完成。一些项目使用这种方法,如VLCJ(java绑定到libVLC引擎,VCC媒体播放器中使用的一组GCC +库和插件) – 2012-02-15 08:08:08

这里有大量的变量,语言可能不是决定因素。 MINA的作者Trustin Lee后来创建了Netty,确实提供了非常高的性能。 Lee himself says由于它提供的一些功能与核心过于紧密相关,MINA的“性能相对较差”。因此,在完全重写所有内容之前,你可以先看看Netty。

如果您正在使用Oracle的JVM,您使用的识别代码热点的极其优化的运行时系统(因此称为“热点”),并积极地在运行时优化他们。自从你可以说,事实上,Java代码运行速度比C代码慢的时间已经很长了。 写得很好,经过优化 C代码可能在某些选择任务中表现出等效的Java代码,但从此处的泛化可能不再合适,当然,您的代码必须承担JVM肩负的一些负担你用Java。另请注意,您可以对tune the JVM's garbage collector执行以下几项操作,例如,为了更好地保持一致性并缩短足迹和长时间暂停的间隔时间。

显然C有几个优点(有时候靠近机器有时候就是就是你想要的),对于某些任务显式内存管理也是如此。

您是否将您的rtsp服务器与Wowza进行了比较? 如果你的rtsp服务器的性能比Wowza低,我相信你可以在不改变语言的情况下提高它的性能,否则,如果Wowza与你的服务器有类似的性能,那么它表示Java不能满足性能要求,也许你应该考虑使用c/C++代替。

我在C#中构建了自己的RtspServer,并且没有任何问题可以流向数百个客户端。

http://net7mma.codeplex.com/

代码项目的文章@http://www.codeproject.com/Articles/507218/Managed-Media-Aggregation-using-Rtsp-and-Rtp

你更欢迎届时采取/引用设计! (Apache 2许可证)