высокопроизводительный сервер rtsp

Я хочу реализовать высокопроизводительный сервер rtsp, который должен обрабатывать запрос vod - он обрабатывает только запрос сигнализации, ему не требуется потоковая передача мультимедийного файла. Я выполнил версию, написанную на Java на основе сетевой инфраструктуры Mina, и производительность кажется не очень высокой.

Насколько мне известно, высокопроизводительный SIP-сервер (например, сервер VoIP) написан на C (например, OpenSIPS, Kamailo), следует ли мне использовать C или C ++ для моего проекта, чтобы добиться значительного повышения производительности?

КСТАТИ. Я нашел некоторое объяснение причины, по которой OpenSER написан его автором на C: «С другой стороны, это сборщик мусора, который может вызвать множество проблем при разработке SIP-приложений на Java. Сильно загруженный сервер, написанный на Java, перестает работать, когда Сборщик мусора очищает память. Задержка, вызванная сборщиком мусора, может составлять даже более 10 секунд. Такие задержки недопустимы «Это факт в наши дни, который означает, что я тоже должен использовать C?


person realjin    schedule 15.02.2012    source источник
comment
Теоретически для повышения производительности приложения Java необходимо создать оболочки для библиотек динамической компоновки в собственной ОС, оптимизированной с использованием другого языка программирования, такого как ассемблер / C / C ++. Это можно сделать с помощью технологии Java, такой как JNI или JNA. Несколько проектов используют этот подход, например VLCJ (привязка java к движку libVLC, коллекция библиотек GCC + и плагинов, используемых в медиаплеере VLC)   -  person ee.    schedule 15.02.2012


Ответы (3)


Здесь огромное количество переменных, язык не может быть определяющим фактором. Трастин Ли, автор MINA, позже создал Netty, действительно обеспечивающую очень высокую производительность. Сам Ли говорит, что MINA имеет "относительно низкую производительность" из-за сложности некоторых функций, которые она предлагает. плотно привязан к сердцевине. Так что вы можете взглянуть на Netty, прежде чем полностью все переписать.

Если вы используете Oracle JVM, вы используете чрезвычайно оптимизированную систему времени выполнения, которая определяет «горячие точки» в коде (отсюда и название «HotSpot») и агрессивно оптимизирует их во время выполнения. Прошло много времени с тех пор, как можно было сказать ipso facto, что код Java будет работать медленнее, чем код C. Хорошо написанный, оптимизированный код C, вероятно, превосходит эквивалентный Java-код в некоторых избранных задачах, но обобщение оттуда, вероятно, больше не подходит, и, конечно же, ваш код должен взять на себя некоторые из бремени что JVM возьмет на себя Java. Также обратите внимание, что вы можете сделать несколько вещей, чтобы настроить JVM сборщик мусора, например, чтобы предпочесть последовательность и короткие паузы, а не след и длинные паузы.

Очевидно, что C имеет несколько сильных сторон (иногда быть ближе к машине - это именно то, что вам нужно), как и явное управление памятью для определенных задач.

person T.J. Crowder    schedule 15.02.2012

Вы сравнивали свой сервер rtsp с Wowza? Wowza также написана на Java, если ваш rtsp-сервер имеет более низкую производительность, чем Wowza, я считаю, что вы можете улучшить его производительность, не меняя язык, в противном случае, если Wowza имеет аналогичную производительность с вашим сервером, это означает, что Java не может удовлетворить требования к производительности, возможно вам следует подумать об использовании вместо этого c / c ++.

person ciphor    schedule 15.02.2012

Я создал свой собственный RtspServer на C #, и у меня нет проблем с потоковой передачей для сотен клиентов.

http://net7mma.codeplex.com/

Статья Code Project @ http://www.codeproject.com/Articles/507218/Managed-Media-Aggregation-using-Rtsp-and-Rtp

Приглашаем вас принять / сослаться на дизайн! (Лицензия Apache 2)

person Jay    schedule 12.12.2012