Как организовать трансляцию на 5 суток (почти) без разрывов?

dxwuvt1gzxch3krbeuytpnc6xuq.png
Недавно закончился наш слегка безумный спецпроект с роялем, падающим на танцующего котика. Пять суток подряд мы показывали с трёх камер висящий рояль и его клавиши с помощью сервиса потоковых трансляций Facecast и устройств Evacoder One. Хотим рассказать вам, как это всё было организовано, и поделиться своими впечатлениями. 

▍ Почему мы решили не использовать Youtube?


В эпоху блогеров и стримеров, когда функцию трансляции запихивают практически в любое устройство с камерой, кажется странным, зачем вообще понадобилось использовать какие-то сторонние сервисы или, тем более, аппаратные решения. Со стороны может показаться, что «да подключи мобильный телефон к Wi-Fi, запускай стрим, и вот у тебя готовая трансляция!». Но мы довольно часто видели такие решения «на коленке» с задержками, обрывами сигнала или глитч-эффектами и не могли отнестись к участникам нашего квеста так безалаберно, ведь от качества картинки и стабильности зависела вовлечённость в проект.

Кроме того, нам нужна была низкая задержка трансляции той камеры, которая смотрит на клавиши рояля, ведь участникам надо было видеть, как записанные на сайте нажатия дублировались на живом рояле. 

И третьим аргументом было то, что вся связка (как минимум та, что будет закреплена на рояле) должна работать все 5 суток как часы, чтобы не приходилось ставить стремянку и что-то там «химичить». Во-первых, это нарушило бы сценарий («что это вообще за мужик в квартире у девушки?»), а во-вторых, доступ к транслирующему оборудованию был бы невозможен, потому что оно размещено внутри рояля, а крышку после подвешивания рояля уже не поднять, она крепко прижималась бы тросами:

c3ee6a59239d5f353ec4089accc8bed7.png

По всем этим критериям мы не стали использовать тот же Youtube: сервис не гарантирует непрерывности трансляции, задержка слишком велика, а настройки и возможности аналитики для нас слишком скудные. Twitch мы даже не рассматривали из-за рекламы, которую вставляют в трансляцию, и мы не были уверены в стабильности вещания. Discord, в котором мы организовали чат участников, вообще не заточен под видеостриминг, да к тому же в нём ограничено количество зрителей. 

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

Так выглядела октава рояля на сайте:

2536628b6416dcdabda8647e1f304534.png

А это вид с камеры GoPro, закрепленной на рояле и транслирующей игру участников квеста:
2dbb4693bb1f6a43a58c157c752d79c2.png

Кроме того, каждый день в 12:00 наша девушка должна была перерезать очередной трос, и это тоже должно быть видно без задержек и с высоким качеством, ведь с каждым перерезанным тросом вероятность того, что рояль упадёт, будет всё выше. 

Мы уже пару раз успешно работали с компанией Facecast по другим проектам, и когда идея нашего квеста была более-менее сформирована, то предложили им поучаствовать.

Схема работы сервиса выглядит так:

b2b46f7ad7cb3ce8e19806659998a6ab.png

Ключевых компонента два: облачный сервис и устройство-энкодер. К одному или нескольким энкодерам мы подключаем камеры, а сами энкодеры подключаем к сети по проводу, Wi-Fi или через сотовый модем — и можно всем показывать. Для просмотра трансляции достаточно браузера, никаких специальных приложений не нужно. Плеер подберёт наилучшие разрешение и битрейт для конкретного устройства, чтобы и качество картинки было наилучшим, и чтобы тормозов не было. Можно также встроить видеопоток в свою страницу, например, страницу митапа или лендинга.
4ec260fe1c752ae9730202735f3a749a.png

За бесперебойность трансляции отвечают аппаратные энкодеры, который берут сигнал с камер, преобразуют его и через облачный сервис передают его зрителям. Компания предлагает несколько моделей энкодеров, мы взяли самую простую — Evacoder One, небольшой плоский кирпичик из цельного алюминия, весь покрытый рёбрами охлаждения.
91c34e7cba7fa144d32c6ba8d79cf274.jpg

Эта модель предназначена для стационарных трансляций из помещений. К такому энкодеру можно подключить через HDMI или SDI одну камеру. Аппарат поддерживает современные видеокодеки Н.264 и Н.265 и передаёт видео с частотой 30 кадров в секунду и разрешением до 4К. 

Самое интересное, что к сети Evacoder One можно подключить не только проводом или через Wi-Fi, но и одновременно до 16 сотовых модемов. Устройство объединяет их пропускную способность, и таким образом можно передавать тяжёлые 4К-потоки. При подключении через один 4G-модем с момента поступления сигнала в энкодер до его появления на сервисе проходит 10–30 секунд. Но конечная задержка зависит от интернета у конкретного зрителя. Ещё одна фишка связки сервиса и энкодером — буферизация потока: даже если интернет-подключение энкодера временно прервётся, трансляция будет идти непрерывно, и после восстановления подключения произойдёт бесшовное восстановление потока.

На стороне облачного сервиса тоже много интересного. Например, есть restream-сервер и функции разграничения доступа зрителей, чтобы предотвратить пиратские ретрансляции с одного аккаунта. Есть богатые средства аналитики аудитории. Через сервис можно даже продавать билеты на трансляции. 

У нас было три вещательные камеры, подключённые к трём Evacoder One: одна камера снимала общий план рояля, вторая снимала его со стороны тросов, а третья камера снимала крупным планом клавиши рояля:

48af65c78c3256377c93af17c94acea5.png

b37ed3cbb0693a7cf65f7b85d7f68527.jpg

91ea21b62f30d31a717ecfa1b2770133.jpg

ddd1d4372ecb8c5c47f3ba3c360d6f1a.jpg

Причём энкодер, подключённый к «клавишной» камере, был спрятан в самом рояле и безо всяких проблем пережил падение, ни на мгновение не прервав трансляцию.
0983af8061c80f00e2eb6e441096c21f.jpg

2ca7f643fa0c436c196ea971d90d09fd.jpg

▍ Общее впечатления и факапы


Первый факап случился через 20 часов после начала трансляции. Изображение с двух камер GoPro стало дергаться. Мы быстро сообразили, что дело в стабилизаторе камер GoPro 7, который перегрелся и «устал». Камеры были установлены на штативах, поэтому стабилизатор там вообще не нужен был и мы его выключили, после чего изображение снова стало стабильным (и, кстати, задержка тоже стала меньше, потому что теперь камерам не приходилось обрабатывать видео для стабилизации и они сразу отдавали его в HDMI).

А второй факап произошел в самый неподходящий момент…

Как мы уже писали, Evacoder One поддерживает не только два независимых проводных Ethernet-соединения с интернетом, но и до 16 сотовых модемов. В качестве основного канала у нас была выделенная линия от местного провайдера, стабильно отдающего 250 мегабит в секунду. Второй проводной Ethernet протянуть было нельзя, потому что в здании интернет захватил монополист, не пускающий других провайдеров (думаю, ситуация знакомая для многих организаций). Поэтому в качестве резервного интернет-канала у нас был LTE-модем от Yota. Студия расположена рядом с оборонным предприятием, которое глушит сигналы сотовой связи и LTE-соединение периодически отваливалось. Но через 2–3 минуты сигнал восстанавливался и последующие 4–5 часов вёл себя хорошо, отдавая стабильно 50 мегабит в секунду. 

Мы тестировали основное и резервное соединение в течение четырёх дней и связь была стабильной. Вероятность того, что оба канала будут сбоить одновременно, была очень небольшой. И мы решились на запуск с двумя этими каналами. 

Оцените иронию: пять суток трансляция велась без сбоев, и в самый кульминационный момент примерно на 12 секунд подвисло изображение с одной из камер (общего вида, спасибо BuzzardDoc за запись). На записи, которая пришла на сервер, сбоя нет, но, вероятно был небольшой дисконнект между Evacoder One и сервером Facecast из-за сбоя в интернет-соединении, что и вызвало задержку. 

07673414e6c41ee9f83f2235d191e8ca.png

Однако это стало предметом для шуток в чате квеста про то, что это был «фотошоп» и рояль на самом деле не стали ронять, а аккуратно опустили. Хорошо, что мы вели запись еще с 5 камер, и момент падения выложили через пару часов.  А чуть позже и вовсе выложили режиссерскую версию.
5ef155528daa5e68da54b798de617c02.png

В остальном же все 5 суток трансляция велась вообще без сбоев, нам ни разу не пришлось перезагружать оборудование, что-то перенастраивать или «передергивать» кабели, всё работало как часы. 

Поэтому совет: не пренебрегайте резервными интернет-каналами для своей трансляции, создатели Evacoder One не зря предусмотрели их аж 18 штук. 

▍ И напоследок немного скриншотов и статистики:


Пики максимума зрителей приходились на 12:00. Всем было интересно посмотреть, как девушка перерезает болгаркой очередной трос. 
0234d08752ab65af41d6dec4dbcd3450.png

По статистике трансляции мы отслеживали динамику интереса аудитории:
8c45eddef1b35d433e2bc9025215d410.jpg

К качеству картинки у нас претензий не было, заметных артефактов пережатия потока не было, разрешения хватало, и даже на 27-дюймовом мониторе можно было разглядеть летящие искры:
b4d1afea9f988981bceb9e0f122d5cdd.png

bd184d6744484a0d636e82e9d0458f9d.png
72c231bb14cabc532efed2135b0126e7.jpg

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru