Pull to refresh

Linux, Open Source и современное телевидение

Reading time3 min
Views24K
Примерно год назад было принято решение о запуске нового телеканала высокой чёткости. Встал вопрос о техническом оснащении имеющейся аппаратной по выпуске SD каналов новым оборудованием. И первое что приходило в голову — расширить имеющийся комплекс Skylark, «докупив» оборудование. Посчитав примерные затраты, руководство пришло в лёгкий шок — цены кусались. И вот тут-то у меня родилась идея, построить эфирный комплекс на Linux.

Изучив имеющиеся решения пришел к выводу, что только труд поможет осуществить задуманное. Прикинул масштабы бедствия и ответственность перед заказчиком канала в лице «Ростелеком», сделал глубокий вдох и отправился к руководству.
Выслушав идеи, задав несколько уточняющих вопросов, приняв во внимание прошлые мои проекты, принял решение немного приостановить процесс принятия решения о покупке готового комплекса, дав мне шанс воплотить идеи в нечто «материальное», за что ему огромное спасибо.

Итак, задача выглядела следующим образом: создать автоматизированный комплекс по выпуска HD канала, основываясь на существующих телевизионных стандартах и имеющий, при необходимости, возможность сопряжения с другими «стандартными» устройствами.

Первым делом предстояло самое сложное, сделать playout сервер умеющий воспроизводить файлы по расписанию, синхронизировать время по GPS и/или NTP, подгружать недостающие, проверять на пригодность имеющие, накладывать несколько слоёв графики, а ещё сообщать о своём состоянии и возможных проблемах по электропочте и/или СМС.

В качестве «всеядного плеера», естественно, был выбран ffmpeg, но не как есть, а в виде фреймворка под названием MLT Framework. Очень мощная вещь, но сделанная по принципу «ничего лишнего». К данному фреймворку было добавлено кэширование чтения файлов с диска, синхронизация времени воспроизведения (не системной службы, а именно фреймворка) с NTP. Переписан модуль наложение графических слоёв с использованием OpenGL. В отдельных потоках были организованы доступ к MySQL, подгрузка файлов с удалённых хранилищ по протоколу BitTorrent (чуть позже объясню зачем), а так же поток следящий за текущем воспроизведением и выполняющий добавление файлов в плейлист и удаление вышедших из эфира.

В качестве «выходного» модуля в сервере используется плата ввода-вывода от Blackmagic. Это компания делает интересное железо, но вот с программными компонентами, такими как драйверы и прошивки, у них вечная проблема. В результате чего пришлось искать более-менее стабильную версию драйверов. Выбор остановился на версии 9.8. Последующие версии имели интересные «плюшки», но плата переставала воспроизводить звук по SDI примерно через сутки.

Закончив отладку своего кода и проверив работоспособность, playout был запущен в режиме тестирования. Но дабы не терять время, я перешел к «очеловечиванию» элементов управления процессом.

Для этого на Qt был сделан интерфейс для загрузки готовых плейлистов в форматах xls и csv, а также возможностью формировать плейлист путём перетаскивания элементов из базы.

Спустя месяц всевозможные проверки сервера были завершены. К тому моменту был готов интерфейс пользователя и произведена загрузка контента в базу.
Пришло время показать предварительный результат и получить согласие на дальнейшие действия. Всё прошло как по маслу. И, как следствие, началось развертывание инфраструктуры на «боевых» серверах.
Был поднят основной и резервный playout, несколько энкодеров, которые тоже были написаны и проверены в общей связке. Энкодеры обеспечивают транскодирование «тяжёлых» MXF и MOV в x264.

Так как основной кластерный массив на infiniband и файловой системой Lustre находился вне эфирной аппаратной, необходима было доставлять контент на сервер. Здесь и был задействован BitTorrent протокол. В данном случае, его использование было обусловлено увеличением отказоустойчивости. Сервер имеет свой собственный файловый массив RAID-10 mdadm. Но бывает всякое и в случае выхода из строя массива, сервер начинал тянуть контент используя возможность протокола BitTorrent последовательно скачивать файл. А как только массив восстанавливался — переключался обратно. Плюс, это повышало оперативность замены плейлистов. Предположим, по тем или иным причинам, был изменен фильм, который, вот прямо через две минуты, должен был начаться. В этом случае сервер начинал скачивать фильм с основного массива и параллельно отдавал данные резервному серверу.

В качестве потокового энкодера mpeg-ts x264, так же был выбран Open Source продукт, но об этом, возможно, в следующий раз.

Система была готова начать эфир. Спустя несколько месяцев подготовительных работ, закупки контента, озвучания и внесения в базу, был запущен технический эфир. А спустя ёще месяц, 1 октября 2014 года, система начала вещание на всю территорию России.

Этот пост не столько о Linux, Open Source и телевидении, сколько о том, что можно и нужно осуществлять идеи. И тогда, накопленный опыт обязательно поможет вам создать что-то новое и, возможно, даже гениальное.
Tags:
Hubs:
+42
Comments22

Articles

Change theme settings