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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо тебе добрый человек за udpxy.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата

Архитектура 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: как для рекламной статьи: нет графиков и цифер о деньгах, и слишком часто упоминается об падениях.

Поделиться сообщением


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RTFM же!

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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


/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 очевидно дают лучший результат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти
Подписчики 0