Jump to content
Калькуляторы

От udpxy к GigA+: путь развития ПО доставки видеопотоков

Материал: GigA+ заинтересует тех, кто желает привнести HLS в “репертуар”, но не идёт по пути построения “хитроумного агрегата” собственными силами. Тем, кто уже работал с Gigapxy и знаком со “архитектурным стилем” данного продукта. Стиль этот будет выдержан и улучшен в GigA+. Полный текст

Share this post


Link to post
Share on other sites
Цитата

Архитектура udpxy была подчинена принципу крайней простоты. Это был простейший вариант "forked server" (по имени системного вызова fork(2)) для выполнения задач на маломощном процессоре с небольшим

количеством памяти.

Оно было кое как написано, обложено костылями со всех сторон.

https://github.com/pcherenkov/udpxy/tree/master/chipmunk

 

Цитата

Чем обосновывался выбор "forked server" как архитектуры приложения? Прежде всего, уверенностью в простоте задачи, для которой не требуются сложные средства. Нагрузка от переключения между (максимум) 16-ю процессами не была существенной и не оправдывала усложнения.

Мультиклиентность была прикручена ещё одним костылём в виде форка, как самое простое решение.

О ресурсах: если два и более клиента смотрят один канал, то бедная железка создаёт на каждого по юдп сокету чтобы получать один и тот же мультикаст а ядро размножает пакеты.

Очень заботливо.

 

Цитата

Бизнес-пользователи просили внести и множество иных изменений, продвигавших продукт в сегмент промышленного ПО.

Бизнес пользователи уже ничего не просили.

udpxy был заброшен долгие годы, там вообще ничего не добавляли, на все просьбы ложился болт, какие то патчи как то принимались...

Да и добавить было большой проблемой, даже простые опции, не говоря о функционале. (из собственного опыта)

Это и породило в начале инструкции о том как жить с попоболью и udpxy в продакшене:

https://habrahabr.ru/post/111317/

https://habrahabr.ru/post/152397/

А потом и альтернативные решения: mc2http (msd/msd_lite), astra.

 

Цитата

Разработка начиналась под FreeBSD, но вскоре стала параллельно идти под Linux как набирающей популярность в серверной среде.

лол.

Это в 2015 году линукс набирал популярность?)

 

Цитата

Клиенты могли в одночасье предпочесть некий канал А всем иным (как, например, во время трансляции футбольного матча) и перегрузить отведённый каналу (единственный) "движок" (читай - ядро процессора).

Это проблема плохого взаимодействия с системой.

Нет особых проблем в том, чтобы одним потоком на вдуть хоть 40г на современном то железе.

 

Цитата

Почему не был выбран иной механизм, например, кольцевой буфер? Система цепочек воспринималась при планировании наиболее гибкой, а схема потребления память цепочками - более разумной. Оправдался ли расчёт? Несомненно.

Кто то не осилил кольцевой буфер. %)

На самом деле в том же msd_lite кольцевой буфер это один кусок памяти, который в зависимости от состояния интерпретируется либо как цельный буфер либо как два буфера. И мизерный оверхэд на мету.

А где же результаты сравнения?

 

Цитата

Расчёт на то, что в процессе долговременной работы процесс gws может в какой-то момент "упасть" был оправдан. Модуль, отвечающий за обработку внешних запросов, рано или поздно сталкивается с "нестандартными" запросами, способными причинить вред из-за скрытых недостатков кода.

Цитата

Падений же gng, благодаря простоте внутренней логики, было крайне мало.

Да, кот с недостатками он такой - так и падает. )))

Что то у меня даже msd_lite не падал ни разу, не говоря об nginx, где многопроцессная модель используется отнюдь не для предотвращения крахов, а для миграции конфигов, обновления на живую и чтобы воркеры держать под не привилегированными юзерами а мастер процесс под рутом мог делать нужное ему.

 

Цитата

Эталоном остаётся пример покупателя, сумевшего "насытить" 10 гигабитную сетевую карту потоками с не самого современного сервера.

Да, видел его графики со всеми ядрами в полку, бедолага просто не видел других решений, там бы его старый тазик жрал проц не в полку а ядра полтора-два, а то и меньше.

Кажется (со слов автора), даже астра отдаёт десяточку в один поток (она потокам так и не научилась, вроде) и без использования фичей ОС.

 

Цитата

GigA+ заинтересует тех, кто желает привнести HLS в "репертуар", но не идёт по пути построения "хитроумного агрегата" собственными силами.

Настроить ffmpeg + nginx не всем по силам, даже копипастой из инета, увы.

Шифрование в ffmpeg вроде тоже есть, прямо из коробки можно накрутить.

Масштабирование - средствами nginx - хоть до бесконечности/планетарных масштабов.

 

 

Спасибо за udpxy, он показал направление, что это возможно и как делать не нужно.

PS: как для рекламной статьи: нет графиков и цифер о деньгах, и слишком часто упоминается об падениях.

Share this post


Link to post
Share on other sites
Завязывайте! UdpXY был интересен в самом начале, но оказался кривым как хрен знает что! Сразу пришлось перейти на нормальный mc2http, а потом и на msd_lite. Вот этот софт (msd_lite) реально работает, реально экономит ресурсы и для него не является достижением загрузить хоть 100G сетевую карту!

Share this post


Link to post
Share on other sites

Реальный msd_lite у меня нарушал поток так что VLC сообщал об ошибках, а картинка периодически дергалась, а udpxy просто взлетел и заработал.

И это я наслушался хвалы msd и попробовал его первым, а он еще и не особо работает.

 

Делал для себя дома, так что даже разбираться особо не хочется, не заработало значит в печь

Share this post


Link to post
Share on other sites

RTFM же!

http://netlab.dhis.org/wiki/ru:software:msd:config#ringbufstorepath

Скорее всего нужно было пошаманить с тем, куда он складывает кольцевой буфер, лучше его ложить в tmpfs а не на реальный диск.

Share this post


Link to post
Share on other sites

Вместо тысячи слов


/usr/local/bin/msd_lite -c /opt/msd_lite/etc/msd_lite.conf

 

[root@msd ~]# grep ringBuf /opt/msd_lite/etc/msd_lite.conf
            <ringBufStorePath>/tmp</ringBufStorePath>
            <ringBufSize>1024</ringBufSize> <!-- Stream receive ring buffer size. Must be multiple of sndBlockSize. -->

[root@msd ~]# df -h | grep /tmp
tmpfs              245M            0  245M            0% /tmp

 

iz@iz-lt ~> vlc share/iptv_msd.m3u
VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c)
[0000000001096148] core libvlc: Запуск vlc с интерфейсом по умолчанию. Используйте 'cvlc' для запуска vlc без интерфейса.
[0000000001198308] qt4 interface error: Unable to load extensions module
[0000000001151ad8] core playlist: stopping playback
[h264 @ 0x7f93cc0f78e0] error while decoding MB 20 29, bytestream -14
[h264 @ 0x7f93cc0f78e0] error while decoding MB 5 21, bytestream -8

 

Что бы там ни было, но костыли udpxy очевидно дают лучший результат

Share this post


Link to post
Share on other sites

Тогда нужно смотреть все настройки софтины и системы, и лог от запуска софтины до окончания просмотра канала.

Лайт уже приживается в роутерах, там ресурсов ещё меньше обычно...

Share this post


Link to post
Share on other sites

В качестве послесловия:

 

За udpxy всем благодарившим - большое "пожалуйста". Я рад, что получил столь обширный комментарий. 

 

Живучесть udpxy, замышлявшегося как приложение для домашнего использования, опередила все мои ожидания. Приложению этому исполнилось 10 лет, оно используется по всему миру и проникло невесть куда (дистрибутивы, порты, прошивки и т.п.).

 

Я рад, что новые продукты (Gigaxy, GigA+) были хорошо приняты, что позволяет мне на постоянной основе заниматься их развитием в коммерческом ключе и выпускать новые приложения. Я рад тем, кто захочет лично проверить эти продукты "на прочность", на пригодность в конкретной среде.

 

В комментариях я нашёл один момент, который стоило бы упомянуть в статье: был период, когда udpxy застыл, и отклики на запросы дейстивтельно шли с трудом и большими задержками. Момент этот был учтён в организации работы с пользователясм новых продуктов и, как мне видится, усилия оценены положительно. Полезной было и замечание об отсутствии в статье графиков и выкладок, хотя статья и не замышлялась как сравнительный анализ. Я несомненно учту и этот момент - ибо не кодом единым.
 

Всех благ,

Павел Черенков

 

P.S.: Я точно не "завяжу". :)

Share this post


Link to post
Share on other sites

крылья... ноги.... хм, главное хвост!

 

или еще лучше AvProxy https://github.com/marakew/AvProxy/ который уже все умеет

чем этого ждать то msd или gigaxy

Edited by paradox_

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this