Ради спортивного интереса решил написать на нем что-то полезное, доброе, полезное для общества, ну и само собой поиграться с этим прекрасным языком. Сам-то я не местный знаю 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/
Добавить комментарий