Ради спортивного интереса решил написать на нем что-то полезное, доброе, полезное для общества, ну и само собой поиграться с этим прекрасным языком. Сам-то я не местный знаю 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)
Теперь прошу помощи зала — что нужно добавить или удалить? С учетом вашего опыта, взываю к силе Хабра — порекомендуйте как нужно сделать правильно, по фен-шую!
Внимательно читаю комментарии!
Специально для сайта ITWORLD.UZ. Новость взята с сайта Хабр