Изходният код на проекта msd (Multi Stream daemon) е преведен на лицензия BSD и е публикуван в GitHub. Преди това в изходните текстове бе разпространявана само съкратена версия msd_lite, а основният продукт беше собственически. Освен промяната на лицензията, е извършена работа по портироването на платформата macOS (по-рано се поддържаха FreeBSD и Linux).
Програмата msd е предназначена за организиране на IPTV стрийминг мрежа през HTTP протокол. Един сървър може да обслужва хиляди клиенти едновременно. Основният акцент е поставен върху постигането на максимална производителност, както и предоставянето на прецизни настройки, които влияят на качеството на услугите за клиентите, включително скорост на смяна на каналите и устойчивост на прекъсвания по време на предаване. Реализирано е прокси в режим „едно към много“: данни, получени чрез едно HTTP съединение, могат да се предоставят на множество свързани клиенти.
Характеристики
- Поддръжка на протоколи IPv4 и IPv6.
- Анализатор на поток MPEG2-TS.
- Автоматично превключване към резервен източник при липса или грешки в текущия източник.
- Zero Copy on Send (ZCoS) — намалява разходите за обслужване на свързаните клиенти, цялата работа по изпращане на данни на клиента поема ядрото на ОС.
- Поддръжка на http-клиенти с „половин затворено“ състояние.
- Прием на udp-multicast, включително rtp, едновременно от различни интерфейси.
- Прием по tcp-http-get (в един поток и излъчване на множество клиенти).
- Автоматично прекъсване на свързването с източниците при липса на свързани клиенти.
- Използване на различни алгоритми за контрол на затрупването на TCP в зависимост от порта, на който е свързан клиентът, и URL заявката на клиента.
- „умна“ изпращане на заглавките MPEG2-TS на нови клиенти.
- Мгновено изпращане на данни на новия клиент от кръговия буфер, за да се минимизира времето за чакане за стартиране на възпроизвеждането.
- Изпращане на всякакви допълнителни http-заглавки в заявките и отговорите.
- Шаблони за настройки за Stream Hub и източници на поток.
- Подробна статистика за всяко TCP свързване, за да се улесни идентифицирането на проблеми на мрежово ниво.
Източник: opennet.ru
