Как стать автором
Обновить
6
0
Azat Galiev @GaryFreeman

.NET/Angular Software Engineer

Отправить сообщение
Здравствуйте!

Не совсем так. «Транслятор» и студия у нас в Уфе, но, поскольку, прямых эфиров нет, между студией и вещательным сервером никакой выделенной линии не требуется. Весь эфир — линейный и материалы заливаются заранее через обычный интернет.

Из Уфы в Казань сигнал идет уже сжатым в H.264/MP3 для кабельного оператора Татарстана, причем, даже не в FullHD, а в SD 720x576 (требование оператора). Если у ТТК падает связь — без картинки остаются абоненты только одного оператора (резерва нет), но пока такого, к счастью, не было.

Единственный кейс, когда все зрители оставались без эфира — во время профилактики после установки обновлений на Windows сервер не поднялся, пришлось ехать в ДЦ. После этого на всякий случай подключили удаленную консоль. Но все это было ночью в течение 1-2 часов.

По поводу хранения — на сервере установлено 3 физических диска без RAID, один под систему и два — под контент. Резервирование обеспечивается сторонним облачным сервисом. В случае сбоя, запустим аварийный плейлист и за несколько часов восстановим все материалы из облака.
Нет, не пробовали, изучу, спасибо! Какое-то время сидели на Wowza, где платили за количество одновременных зрителей, в какой-то момент стало рентабельней сделать свое решение :)
Первые 4 триггера идут из коробки использованного template'а.
Для определения громкости и SSIM используем такую команду ffmpeg:

ffmpeg \
    -y \
    -t 3 \
    -i http://streaming.matur-tv.ru/hls/h264_aac/stream.m3u8 \
    -filter_complex "split[int1][out2]; [0:a]volumedetect, anullsink; [int1]drawtext=fontfile=monofonto.ttf:fontsize=96:box=1:boxcolor=black@0.75:boxborderw=5:fontcolor=white:x=(w-text_w)/2:y=((h-text_h)/2)+((h-text_h)/4):text='%{gmtime\:%H\\\\\:%M\\\\\:%S}'[bg]; [0:a]showvolume=o=v:w=1080:h=40:f=0:p=0.5:dm=3[fg]; [bg][fg]overlay=x=W-81:y=0[out1]" \
    -map '[out1]' \
    -ss 2.9 \
    -vframes 1 \
    -f image2 /var/www/video_streams_preview/preview.jpg \
    -map '[out2]' \
    -ss 2.9 \
    -vframes 1 \
    -f image2 /var/www/video_streams_preview/diff_3.jpg \
    2>&1 >/dev/null | grep -oP "(?<=mean_volume: ).*(?= dB)"

Что она делает: подгружает первые 3 секунды потока, с помощью фильтров накладывает «телеметрию», замеряет звук с помощью фильтра volumedetect, сохраняет два кадра в виде картинок: с телеметрией для отображения в Zabbix и без для последующего сравнения с кадрами несколько секунд назад и определения SSIM. В консоль команда выводит значение звука в dB:



Команда вызывается из незначительно доработанного Python скрипта использованного template'а (сорри за неаккуратность, делали для себя): pastebin.com/7jjw5wrC

Ну а дальше просто вручную создаем нужные элементы данных и триггеры, данные для которых возвращает py-скрипт:



Из тех картинок с телеметрией делаем вот такой красивый dashboard в Zabbix:



Насчет точек мониторинга — мониторим ту ссылку, которую раздаем операторам и сервисам, поток для сайта/приложения и финальный HLS-поток Яндекс.Эфира, который нам любезно предоставили :) Потоки, которые уходят по UDP Multicast мониторим только по количеству трафика. Если он падает ниже определенного значения — срабатывает триггер.
Спасибо за отзыв!

Завтра сяду и напишу развернутый комментарий :)
UDP мы используем только в пределах дата-центра и выделенной магистрали, для интернета — RTMP.

Были мысли попробовать SRT, но, к сожалению, nginx пока не поддерживает.
Забыл упомянуть. Между вещательным сервером и серверами ретрансляции поток идет по «дикому» интернету. Пока полет нормальный, проблем с этим не было.
В нашем случае генерация происходит непосредственно на сервере в дата-центре. От нашего сервера до серверов кабельных операторов сигнал идет по локальной сети ДЦ по UDP Muticast, в MPEG-TS. За пересылку сигнала по локалке денег не берут, так что, решение вполне бюджетное.

Доставка между Уфой и Казанью, как я уже упомянул, идет по магистрали ТрансТелеком, мы арендуем канал в несколько мегабит. Ничего специально для этого настраивать не пришлось, отдаем MPEG-TS средствами SLStreamerPro на одну из сетевых карт, говорим сетевику ДЦ мультикаст-группу и порт и все, он отдает сигнал на магистраль :) Стоит это удовольствие несколько т.р.

На счет студии, камер и коммутатора — у нас все это не используется, есть студия, но она не участвует непосредственно в эфире, там происходит запись программ по расписанию.
Если будет какое-то количество желающих, могу написать об этой кухне в общем. Как говорится, ставим пальцы вверх :)
То есть, это функция bitbucket, дублировать PR из младших версий в старшие? Подскажите название пожалуйста :)

Спасибо за ответ! Только не совсем понял, что у вас является основной веткой, вроде master'а? От чего вы ответвляете релизные ветки и куда их потом сливаете? И как хотфиксы попадают во все релизные ветки, если их несколько?

Отличная статья, большое спасибо! Такой вопрос: а как у вас устроен репозиторий, а точнее ветки в них (release-branch, dev, master и т.д.), как происходит release management и тестирование? Заранее большое спасибо!

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность