Linux, Open Source і сучасне телебачення

Приблизно рік тому було прийнято рішення про запуск нового телеканалу високої чіткості. Постало питання про технічному оснащенні наявної апаратної по випуску 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 і телебаченні, скільки про те, що можна і потрібно здійснювати ідеї. І тоді, накопичено досвід обов'язково допоможе вам створити щось нове і, можливо, навіть геніальне.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.