високопроизводителен rtsp сървър

Искам да внедря високоефективен rtsp сървър, който трябва да обработва vod заявка --- той обработва само заявка за сигнализиране, не е необходимо да предава поточно медийния файл. Постигнах версия, която е написана на Java, базирана на мрежовата рамка Mina, и производителността изглежда не е много висока.

Доколкото знам, SIP сървърът с висока производителност (напр. VoIP сървър) е написан на C (напр. OpenSIPS, Kamailo), трябва ли да използвам C или C++ за моя проект, за да получа значително подобрение на производителността?

BTW. Намерих някакво обяснение за причината, поради която 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)


Тук има огромен брой променливи, езикът може да не е определящият фактор. Trustin Lee, авторът на MINA, по-късно създаде Netty, който предлага наистина много висока производителност. Самият Лий казва, че MINA има „относително слаба производителност“ в резултат на сложността на някои от функциите, които предлага, като тясно свързана със сърцевината. Така че може да погледнете Нети, преди да пренапишете всичко.

Ако използвате JVM на Oracle, вие използвате изключително оптимизирана система за изпълнение, която идентифицира горещи точки в кода (оттук и името „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