IPTV — это просто. Требуется помощь зала) Часть 1

от автора

Внезапно для себя обнаружил какое-то время назад интересный язык программирования — Go )

image

Ради спортивного интереса решил написать на нем что-то полезное, доброе, полезное для общества, ну и само собой поиграться с этим прекрасным языком. Сам-то я не местный знаю C, asm, Lua, пых и пр. перлы. Но особой радости от программирования не испытывал до того момента обнаружения Go) В области моей юрисдикции находились различные linux системы, включая интернет сервис провайдеры, IPTV-сервисы и пр. биллинги-шмиллинги. Ну да мы отвлеклись, ближе к сути. Я решил, что наиболее полезно будет работать с IPTV, на коем решил остановить свой взор, ибо юзал и cesbo астру и flussonic и другие добротные вещи вроде ffmpeg).

Подумал я, а почему бы и нет?) Одно хорошо для одних задач, другое — для других. Разве не будет уместным написать гибрид? Взять, к примеру, самое лучшее из всех и сделать такую себе идеальную химеру — iptv софт для гиков) Сказано — сделано. Выяснилось что, по сути, нужно примерно 2-3 месяца чтобы написать мясо, ну и год-другой на отладку — ибо дебуг — наше все.

Время от времени у меня возникали вопросы, которые требовали помощи зала и вот, наконец, я решился, потому как да пребудет со мной сила хабра) Опишу первую проблему вкраце — это конфиг. Понятно, что формат — JSON для удобства, ну а что в нем? Прошу рассмотреть мои наброски, поругать или похвалить. С учетом вашего опыта добавить что-то или убрать мусор.
Итак, начнем.

Серверы (порты, с которых будем раздавать вкусняшки и параметры): control (управление по вебу), dvr (архив, с выдачей HLS или mpegts), hls (чанкер), http (mpegts/http).

В этой части обсудим нижеследующий конфиг:

    "control": {         "enable": false,         "addr": ":8090",         "host": "controller.domain.com,ferra.inside.loc"     },     "dvr": {         "enable": true,         "addr": ":1189",         "host": "archive.myportal.com",         "duration": 10,         "fsync": 3,         "timeout": 1800,         "nice": 0     },     "hls": {         "enable": true,         "addr": ":12000",         "host": "",         "duration": 5,         "num": 6,         "timeout": 64     },     "http": {         "enable": false,         "addr": ":7070",         "host": "mpegts.streamer.ly,mpegts.muxer.net"     }, 

Теперь подробнее:

«host» — проверяем по типу grep запрос клиента Host:
«duration» — длина сегмента в секундах (для HLS и для архива (dvr) в HLS)
«num» — длина плейлиста HLS (в данном случае 6 сегментов по 5 секунд)
«fsync» — файловая система любит кешировать данные, а потом сливать их на диск, иногда это выглядит нормально, иногда не очень (лавинообразно). Чтобы прогреть кеш файловой системы нужно время от времени делать sync. В данном случае 3 рандомных файла в секунду. Наблюдать разницу можно тут:

iostat -x 1 sar -P ALL 1 

«nice» — nice/prio горутины, которая пишет на диск (сработает и на мультикаст, но зачем?)
«timeout» — таймаут скачивания чанка в секундах (HLS/DVR)

Теперь прошу помощи зала — что нужно добавить или удалить? С учетом вашего опыта, взываю к силе Хабра — порекомендуйте как нужно сделать правильно, по фен-шую!

Внимательно читаю комментарии!

ссылка на оригинал статьи https://habr.com/ru/post/494892/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *