Мультистрімінг 24/7: одна трансляція на YouTube, Twitch і Kick
Скільки насправді коштує один стрім на кілька платформ, чиї правила діють і чому найнебезпечніший збій - це не відмова платформи, а платформа, яка мовчки перестала читати.
Multistreaming - платформи називають це Simulcasting - це одна трансляція, доставлена одразу на кілька напрямків. Для каналу, який працює цілодобово, вигода очевидна: той самий цикл, що наповнює стрім на YouTube, наповнить і стрім на Twitch, і на Kick, і жодного додаткового контенту це не коштує.
Неочевидні тут три речі, про які й ця сторінка. Скільки це коштує - а це переважно питання того, де саме робиться копія. Що дозволяють платформи - питання з однією суворою відповіддю і кількома поблажливими. І що стається, коли один напрямок перестає приймати дані, нічого про це не сказавши, - збій, який забирає з собою решту трансляції, якщо нічого не зроблено, щоб цьому завадити.
Як вести одну трансляцію на кілька платформ
Механіка всюди однакова: зібрати по напрямку на платформу, а далі вирішити, де робиться копія.
Зберіть ingest-адресу і ключ для кожної платформи
Кожен Destination - це пара, і пари не взаємозамінні.
- YouTube публікує одну адресу для всіх і видає ключ у YouTube Studio. (повний розбір)
- Twitch публікує список ingest-серверів, і будь-який з них працює з ключем із вашого Creator Dashboard. (повний розбір)
- Kick: хост видається під акаунт, тож працює лише адреса з вашого дашборду. (повний розбір)
- TikTok, Facebook, Rumble і Telegram видають адресу разом із ключем - копіюйте обидва, ніколи щось одне.
Вирішіть, де робиться копія
Саме це рішення визначає, скільки мультистрімінг вам коштуватиме.
- На вашій машині: OBS із плагіном мультистріму кодує один раз і відкриває по з'єднанню на платформу. Три напрямки по 6000 kbps - це 18 Мбіт/с, які постійно виходять з вашого дому.
- У хмарі: відео потрапляє на сервер один раз, а з'єднання відкриває сервер. Ваш аплоад несе один потік, а для записаного контенту - один файл, одного разу.
- Кодування в обох випадках відбувається один раз. Множиться доставка, а не кодування.
- Домашній аплоад - типова стеля: 40 Мбіт/с звучить щедро, доки три напрямки і відеодзвінок не поділять їх між собою.
Налаштуйте енкодер за найсуворішою платформою
Одне кодування має задовольнити кожен напрямок, тож обмеження перетинаються.
- H.264 - Kick не приймає нічого іншого, тож HEVC і AV1 відпадають тієї миті, коли Kick з'явився у списку.
- Фіксований Keyframe Interval у 2 секунди: YouTube обмежує його чотирма секундами, а транскодування Twitch залежить від його рівномірності.
- CBR і бітрейт, нижчий за найнижчу стелю серед ваших напрямків.
- Звук AAC 128-160 kbps стерео - його приймає кожна платформа з цього списку.
Захистіть кожен напрямок від решти
Крок, який пропускають, - і причина, з якої fan-out ламається так, як одиночний стрім ніколи не ламається.
- Мультиплексор, що пише в кілька виходів з одного потоку виконання, блокується на найповільнішому з них.
- Кожен вихід має мати право впасти окремо, не завершуючи трансляцію.
- Кожен вихід має мати буфер, який йому дозволено переповнити, щоб зупинена платформа втрачала пакети, а не створювала зворотний тиск.
- Без обох умов одного мовчазного напрямку досить, щоб зупинити все - розділ нижче про це.
Стежте за кожним напрямком окремо
«Стрім в ефірі» - це факт не про трансляцію, а про одну платформу.
- Дивіться на кількість глядачів на кожній платформі, а не на індикатор енкодера.
- Напрямок, якому відмовили на етапі підключення, не з'явиться в жодній статистиці по стріму.
- Dropped Frames на одному напрямку і чисто на решті вказують на маршрут саме до цього ingest.
- Платформи завершують стріми з власних причин - збіг за копірайтом на одній не зупиняє інші.
Що робить fan-out, поки він працює
Усі сервіси мультистрімінгу влаштовані однаково, і саме ця будова пояснює і те, чому друга платформа майже безкоштовна, і те, чому все може стати без жодної помилки:
- Відео копіюється, а не перекодовується. Кодування робиться один раз, і ті самі пакети йдуть у кожен напрямок - саме це означає Fan-out і тому третя платформа коштує частку від першої.
- Кожен напрямок - окрема сесія. У кожної платформи власне з'єднання, власне рукостискання, власні облікові дані і власний спосіб падати, хоча відео вони несуть однакове.
- Кожному треба дозволити падати окремо. Без цього відмова однієї платформи завершує трансляцію для всіх - разом із тими, що працювали.
- Кожному потрібна черга, яку дозволено переповнити. Платформа, що перестала читати, але не відключилася, інакше затримає всіх, а буфер має право викидати те, чого не може доставити, замість чекати.
Виміряна вартість кожного додаткового напрямку на наших власних воркерах - з копіюванням відео і перекодуванням лише звуку, тобто так, як реально працює зациклений стрім 24/7: 9,7% ядра для одного напрямку, 11,9% для двох, 13,0% для трьох. Якщо ті самі напрямки зробити окремими енкодерами, це коштує в 1,9 раза дорожче, бо звук тоді кодується на кожен вихід окремо. Доставка росте лінійно з трафіком - приблизно 2 ТБ на напрямок на місяць при 6000 kbps без зупинок, - а обчислення майже не рухаються.
Чому має відповідати одне кодування
Мультистрімінг забирає свободу тюнити під кожну платформу: налаштування стають перетином обмежень усіх напрямків. Опубліковані числа - YouTube, Twitch, Kick і Facebook, а таблиця обмежень платформ ставить їх поруч.
- Бітрейт: перемагає найнижча стеля. Рекомендація Twitch - 6000 kbps, опублікована стеля Kick - 8000, діапазон YouTube для 1080p60 вищий. Обирайте під Twitch, і решті буде комфортно.
- Кодек: H.264. Kick не приймає іншого. На стрімі лише для YouTube у вас були б варіанти; щойно додається друга платформа - вже ні.
- Ключові кадри: фіксовані 2 секунди. Рівномірність важливіша за саме число - на ній будується драбина Transcoding.
- Роздільність і частота кадрів: по одній. Жодна платформа цього класу не перемальовує ваш стрім під інший розмір; що надішлете, те й отримають усі.
- Звук: AAC 128-160 kbps. Більше на більшості платформ просто відкидається.
Практична відповідь майже для всіх - 1080p60, H.264, CBR 6000 kbps, ключові кадри кожні 2 секунди, AAC 160: один профіль, який не відхиляє жодна платформа з цієї сторінки.
Що дозволяє кожна платформа
Справжні правила про це має одна платформа. Решта - здебільшого ні, а отже сувора й задає форму всього вашого налаштування.
- Twitch - той, хто зобов'язує. Його правила симулкасту поширюються на кожного стрімера, «якщо у вас немає угоди з Twitch, яка вимагає ексклюзивності», і ставлять дві умови: досвід на Twitch не має бути гіршим за паралельні ефіри - їхній приклад це гірша якість відео саме на Twitch, - і не можна активно закликати глядачів Twitch піти на паралельну трансляцію, до чого вони відносять банери, QR-коди, назви трансляцій, сповіщення про вихід в ефір і команди в чаті. Перед будь-якими заходами Twitch надсилає попередження, а сторонні інструменти, що зводять активність кількох платформ, дозволені для власного користування.
- YouTube. Жодної вимоги ексклюзивності для прямих ефірів. Watch Hours, які накопичує стрім на YouTube, зараховуються до YouTube Partner Program (YPP) незалежно від того, чи той самий контент іде десь іще.
- Kick. Опублікованих обмежень на симулкаст на кшталт Twitch немає. У авторів з індивідуальними контрактами свої домовленості, за які жоден загальний гайд не відповідає.
- TikTok LIVE. Щоб стрімити не із застосунку, потрібен доступ до LIVE, і TikTok видає ingest-адресу кожному стрімеру окремо, а не публікує спільну. Поріг за фоловерами зазвичай називають у 1000, але TikTok не вказує його на сторінці, яку ми змогли б перевірити, - вважайте це число чуткою, доки ваш власний акаунт не покаже опцію.
- Facebook і Rumble. Обидва видають адресу разом із ключем і не обмежують паралельні трансляції; Facebook вимагає RTMPS замість звичайного RTMP і взагалі не пускає в ефір акаунт, молодший за 60 днів або без 100 підписників. (розбір по Facebook)
На практиці: якщо ваше налаштування влаштовує Twitch, воно влаштовує всіх. Єдине, чого варто уникати всюди, - чат-оверлей, який зводить аудиторії кількох платформ на стрім Twitch.
Збої, які трапляються лише тоді, коли напрямків більше одного
Одиночний стрім падає голосно. У fan-out є тихіші способи зламатися, і найгірший з них узагалі ні на що не схожий.
Одна платформа зупиняється - і вся трансляція стає
Збій, про який ніхто не попереджає. Напрямок, який тримає з'єднання відкритим і перестає читати, створює зворотний тиск на все, що пише разом із ним, і решта платформ голодує за ним. Ми виміряли смерть стріму саме так - на 51,7 секунди, без жодної помилки, і кожен напрямок далі повідомляв, що він в ефірі.
- Кожному напрямку має бути дозволено впасти окремо, не завершуючи трансляцію.
- Кожному потрібна власна черга з правом викидати те, чого він не може доставити, - щоб зупинена платформа втрачала пакети, а не тримала всіх.
- Одне без іншого не працює: з чергою, якій не дозволено скидати пакети, той самий тест усе одно помер - на 54,8 секунди замість 51,7.
- Сервіс має робити обидва кроки за вас. Про це варто спитати, бо нічого не виглядає зламаним рівно до тієї ночі, коли платформа замовкне.
Один напрямок так і не піднявся, і ніщо про це не сказало
Відхилений на підключенні ключ - це подія одного напрямку, а більшість інтерфейсів енкодерів показують один індикатор на всю трансляцію.
- Після старту перевіряйте кількість глядачів на кожній платформі, а не статус енкодера.
- Скопіюйте ключ і адресу парою заново з тієї платформи, якої бракує.
- Платформу, якій потрібна власна ingest-адреса і якій її не дали, більшість інструментів мовчки пропускає.
- Переконайтеся, що акаунт узагалі має право виходити в ефір - TikTok і YouTube обидва це обмежують.
Втрачені кадри лише на одній платформі
З енкодером усе гаразд; проблема - маршрут саме до цього Ingest Server.
- Порівняйте статистику по напрямках, перш ніж чіпати налаштування енкодера.
- Переведіть цю платформу на інший регіональний ingest, якщо він є.
- Опустіть спільний бітрейт - це єдиний важіль, що діє на всі напрямки одразу.
- Якщо це завжди та сама платформа, проблема в маршрутизації, а не в пропускній здатності.
Fan-out налаштований, а стрім усе одно йде на одну платформу
Типово після вмикання мультистріму на трансляції, яка вже працювала.
- Запущений стрім зберігає ті напрямки, з якими стартував; нові вмикаються на наступному старті.
- Перевірте, скільки напрямків на трансляцію дозволяє тариф, перш ніж вважати це багом.
- Ключ, платформі якого потрібна власна ingest-адреса, пропускається, коли адреси немає.
- Два ключі, що ведуть на ту саму адресу, - це один напрямок, а не два.
Обмеження на тривалість сесії, про які згадують уже після обриву
Дві з цих платформ завершують трансляцію за таймером самостійно і пишуть про це у власній документації. Facebook зупиняє на 8 годинах - однаково для комп'ютера, мобільного і стороннього ПО, без запасу часу, - а Twitch на 48, і зазначає, що змінити це не можна. YouTube і Kick порівнянних обмежень не мають. Тож справді цілодобовий fan-out - це не одна сесія всюди: на одних платформах це постійний стрім, а на інших - цикл перезапусків.
- Розраховуйте на обриви: три перезапуски на добу для Facebook і один раз на дві доби для Twitch.
- Власна порада Facebook - запланована перерва і одразу перезапуск; постійний ключ трансляції робить це автоматизованим, а не переналаштуванням.
- Дванадцять годин на Facebook існують для окремих партнерів, але їх надає Meta в індивідуальному порядку, а не вмикають у налаштуваннях.
- Питання до будь-якого інструменту для стрімінгу не в тому, чи вміє він мультистрім, а в тому, чи перезапускає він напрямок, який завершився сам.
Мультистрімінг 24/7 без власної машини
Для каналу, який має бути в ефірі завжди, локальний варіант помножує кожну свою проблему. Машина має працювати місяцями, з'єднання - постійно нести N-кратний бітрейт, а будь-яке перезавантаження знімає з ефіру всі платформи одразу, а не одну.
TheLoops робить fan-out у дата-центрі. Ви один раз вивантажуєте відео, додаєте по ключу на платформу, і одна трансляція доходить до всіх - причому кожен напрямок має власну чергу і власне право впасти, бо саме це вирішує, чим стане поганий вечір на одній платформі: інцидентом чи виноскою.
Напрямків на трансляцію: 1 на безкоштовному плані, 3 на Basic, 6 на Studio і 10 на Pro - тобто fan-out починається з Basic. Решта чисел - на сторінці тарифів.
Одна трансляція - усі платформи, ключі від яких у вас є
Завантажте відео один раз, і хай один цілодобовий стрім іде на YouTube, Twitch, Kick і решту - з кожним напрямком, ізольованим від інших.
Питання про мультистрімінг
Так. Правила симулкасту Twitch діють для всіх стрімерів, крім тих, хто має з Twitch угоду про ексклюзивність, а ні YouTube, ні Kick обмежень на симулкаст не публікують. Дві умови, які варто пам'ятати, - саме від Twitch: не робіть трансляцію на Twitch гіршою і не використовуйте Twitch, щоб зганяти глядачів на ефір, що йде деінде.
Це цілком залежить від того, де робиться копія. Мультистрім локально з OBS відкриває по з'єднанню на платформу, тож три напрямки по 6000 kbps - це 18 Мбіт/с, які постійно виходять з вашого з'єднання. Мультистрім у хмарі надсилає відео вгору один раз і копіює його на сервері, тож ваш аплоад несе один потік незалежно від кількості платформ.
Майже ні, якщо зроблено правильно. Відео копіюється, а не перекодовується під кожен напрямок, і лише звук кодується один раз на всіх: за вимірами на наших власних воркерах один напрямок коштує 9,7% ядра, два - 11,9%, три - 13,0%. Якщо пропускати кожен напрямок через власний енкодер, це коштує приблизно в 1,9 раза дорожче, бо звук тоді кодується окремо на кожну платформу. Лінійно росте трафік, а не обчислення: приблизно 2 ТБ на напрямок на місяць при 6000 kbps цілодобово.
Так - це та сама RTMP-сесія, і платформи не відрізняють живу камеру від зацикленого файлу. Змінюється операційний бік: енкодер, який має працювати місяцями, на з'єднанні, яке має триматися, - саме тому цілодобовий мультистрім зазвичай ведуть з дата-центру, а не зі столу.
У TheLoops: YouTube, Twitch, Kick, TikTok, Facebook, Rumble, Telegram і будь-яка власна адреса RTMP чи RTMPS. Скільки одночасно - залежить від плану: 1 на безкоштовному, 3 на Basic, 6 на Studio, 10 на Pro. Платформам, які видають ingest-адресу кожному стрімеру окремо, цю адресу треба вказати разом із ключем.