Содержание статьи +
- TL;DR
- Зачем эта статья
- Восемь строк стриминг-стека затрат
- Проработанная модель: 100 000 MAU, гибридный live + VOD
- Как кривая гнётся при масштабе
- Build vs buy: точка переключения для каждой строки
- Подводные камни: три строки, которые большинство моделей считают неправильно
- Чувствительность: что больше всего двигает счёт?
- Частая ошибка: путать concurrent с MAU
- Где встроена Фора Софт
- Ключевые выводы
- Что читать дальше
- CTA
TL;DR
Валовая маржа стриминг-продукта определяется не одной строкой расходов, а восемью: кодирование, упаковка, origin, доставка через CDN, multi-DRM, аналитика, real-time реле (TURN / SFU) и инженерная команда, которая всё это удерживает на плаву. Большинство команд планируют только CDN, удивляются счетам за аналитику и DRM, и впервые видят настоящую стоимость реагирования на инциденты только после первого крупного сбоя. Эта статья строит юнит-экономику с нуля: на входе – концурентные зрители, лесенка битрейтов, часы просмотра в месяц, доля DRM-защищённого контента и live-vs-VOD-микс; на выходе – доллары на час просмотра, доллары на месячного активного пользователя (MAU) и точка «build vs buy» для каждой строки. К концу статьи вы должны уметь взять прогноз аудитории, спрогнозировать счёт следующего квартала с точностью ±15% и сказать вендору, продаёт ли он правильный счётчик для вашей формы нагрузки.
Зачем эта статья
CDN – самая громкая строка расходов, но редко именно та, которая убивает валовую маржу. Bitmovin Video Developer Report за 2025 год называет контроль затрат проблемой №1 для 38% команд видео – больше, чем любую техническую проблему – и причина в том, что счёт не один, а восемь. Подписочный видеопродукт на 100 000 месячных активных пользователей может тратить на аналитику больше, чем на хранение, на DRM-ключи больше, чем на origin-egress, и на пропускную способность TURN больше, чем на весь CDN – в зависимости от формы продукта. Адресат статьи – инженер или основатель, которого спросили «сколько стоит обслужить один час видео?», и финансовый руководитель, который должен защитить решения «build vs buy» перед советом директоров. К концу оба должны уметь читать инвойс вендора построчно, выводить cost-per-viewer-hour для каждой из восьми строк, прогнозировать суммарный спенд на 10× масштабе и точно называть две строки, которые заслуживают следующего раунда оптимизации.
Восемь строк стриминг-стека затрат
Прежде чем расставлять цифры, нужен полный список того, за что выставят счёт. Заголовочная ставка – «мы платим CDN $X за гигабайт» – это только первый из восьми независимых счётчиков, и самые дешёвые на вид строки регулярно становятся самыми дорогими с ростом масштаба.
Первая строка – кодирование: превращение исходного mezzanine-файла (или live-контрибьюшн-фида) в лесенку битрейтов, из которой плеер выбирает рендиции. VOD-кодирование тарифицируется за минуту выхода, помноженную на количество рендиций. Live-кодирование – за канал-час, помноженный на количество входов и выходов. По данным мая 2026 года AWS Elemental MediaConvert на professional-тарифе берёт $0.0150 за минуту HD AVC и $0.0300 за минуту UHD; MediaLive – $0.7656 за час HD-входа и $1.7225 за час UHD, со скидкой до 75% на годовом reserved-коммите. Та же нагрузка на Bitmovin, Mux или self-hosted FFmpeg / SVT-AV1-ферме даёт другие абсолютные числа, но ту же форму: за минуту или за час, умножить на «ступени лесенки × кодеки».
Вторая строка – упаковка: оборачивание выхода энкодера в HLS, DASH, CMAF и любые progressive-download-форматы, которых требует ваша матрица клиентов. На большинстве современных стеков упаковка бирочно включена в стоимость энкодера (CMAF унифицирует HLS и DASH – один CMAF-проход даёт оба манифеста), и предельная стоимость мала. Она становится реальной строкой, когда поверх отгружается multi-DRM с вклеиванием ключей на этапе упаковки, или когда just-in-time-packaging на origin переносит цену с энкодера на CPU origin. Мы держим её отдельной строкой, чтобы команды, которые позже переедут на JIT, видели сдвиг – JIT не меняет общую сумму, но меняет распределение между строками.
Третья строка – хранение и origin-egress: цена держать каждый сегмент каждой рендиции каждого ассета в durable-хранилище плюс цена кормить CDN байтами на cache-miss. Хранение дёшево в расчёте на гигабайт (S3 Standard на $0.023/GB-месяц в мае 2026; более холодные ярусы вплоть до $0.0036/GB-месяц на Glacier Instant Retrieval), но линейно растёт с размером библиотеки и с числом ступеней лесенки. Origin-egress – строка, которую большинство команд пропускают: когда origin и CDN живут в одном облаке – S3 + CloudFront, GCS + Cloud CDN – облако его прощает. Когда нет – S3 origin за Cloudflare или Fastly – каждый cache-miss тянет байты из AWS по стандартной ставке egress $0.05–$0.09/GB. Базовые счётчики на стороне CDN мы подробно разобрали в статье об экономике CDN; эта статья помещает origin-сторону на тот же баланс.
Четвёртая строка – доставка через CDN: байты, которые CDN отгружает с edge зрителям. Это та строка, которую все планируют, и единственная с заголовочной ставкой за GB. Pay-as-you-go-ставка CloudFront для US/EU начинается с $0.085/GB после первого бесплатного терабайта, опускается до $0.020/GB на петабайтном масштабе и примерно в два раза ниже на committed-use-сделке с Akamai, Fastly или CDN-native-стриминг-провайдером. Cloudflare и BunnyCDN работают в дешёвом конце с почти плоской ставкой. Полная механика – 95-й перцентиль, commit-and-overage, четыре счётчика на провайдера – в статье об экономике CDN.
Пятая строка – DRM: плата за лицензию за каждое решение о воспроизведении зашифрованного контента, которое принимают ваши плееры. Сами по себе схемы (Widevine, FairPlay, PlayReady) бесплатны на уровне технологии, но операционная реальность – вы платите multi-DRM-вендору (EZDRM, BuyDRM, DRMtoday, Castlabs, Axinom, Verimatrix, doverunner, DRM-аддон Mux) за хостинг license-серверов и за «сертификатный танец» с Apple. Модели делятся на два лагеря. Per-stream и per-license-модели берут долю цента за зашифрованный просмотр: DRM-аддон Mux – $100/мес + $0.003 за просмотр в мае 2026; doverunner – $299 + $0.06/пользователь за первые 9 000 сверх базы и $0.04/пользователь выше. Подписочные модели берут ежемесячный платёж с пакетом просмотров: EZDRM от $199.99/мес, BuyDRM от $99/мес, DRMtoday – пакетами. Сами три DRM мы рассмотрели в статье DRM 101 multi-DRM; эта статья ставит DRM на модель.
Шестая строка – аналитика: QoE/QoS-телеметрия, которую плеер отправляет в SaaS-дашборд. Mux Data, Conviva, Bitmovin Analytics, Datazoom, NPAW (YOUBORA) – все тарифицируют за viewer-hour или за сессию, со ставками от примерно $0.0005 до $0.005 за viewer-hour в зависимости от объёма, длины контракта и того, сколько «AI-assisted incident response» вы прикрутите сверху. Аналитика – строка, которая тихо обгоняет CDN на подписочном VOD с высокой вовлечённостью: viewer-hour, который стоит $0.001 на CDN на масштабе, может стоить $0.002 на аналитике, если вы остались на pay-per-hour. Сравнение вендоров – в статье о платформах аналитики; юнит-экономика – в этой.
Седьмая строка – real-time-реле: TURN-серверы, пробивающие NAT для WebRTC-трафика, плюс SFU, размножающие поток одного публикатора на нескольких подписчиков. Если ваш продукт – чистый HLS/DASH VOD, эта строка нулевая. Если вы поставляете видеоконференции, телемедицину, real-time-аукционы или любой интерактивный live-кейс, TURN может стать самой большой строкой счёта – потому что TURN-реле несёт полную медиа-полезную нагрузку в обе стороны, и one-to-many звонок на 1 Mbps с десятью участниками гонит через реле 10 Mbps. SFU-хостинг трафика следует той же логике, но с большей удельной ценой, потому что SFU делает дополнительную CPU-работу. В модели мы держим TURN и SFU как одну строку, а архитектурную деталь оставляем для статей SFU vs MCU vs Mesh и сравнения mediasoup / Janus / LiveKit / Jitsi / Pion.
Восьмая строка – инженерная команда и операции: зарплаты людей, которые поддерживают семь предыдущих строк, плюс on-call-ротация, плюс монитор-стек, плюс неминуемый AWS Support. Эта строка – самая большая на большинстве команд ниже ~100k MAU, вторая по величине на большинстве команд выше 1M MAU, и строка, которую чаще всего забывают в презентациях «cost per viewer-hour». Мы её включаем, потому что точка «build vs buy» для всех остальных семи строк решается именно ей.
Проработанная модель: 100 000 MAU, гибридный live + VOD
Поставим цифры на каждую строку на конкретном примере. Продукт – гибридное стриминговое приложение: половина – VOD-библиотека, половина – расписанные live-события, плюс небольшой WebRTC-интерактив. Сто тысяч месячных активных пользователей. Входные данные:
- MAU: 100 000.
- Среднее число часов просмотра на MAU: 12 (медиана индустрии Bitmovin 2025 по гибридному OTT – тяжёлые пользователи смещают медиану).
- Средний битрейт рендиции (взвешенный по лесенке): 4.0 Mbps. Лесенка отгружает 240p / 360p / 480p / 720p / 1080p; ABR в продакшене оседает на 4.0 Mbps, если взвесить по микшу устройств зрителей и распределению Wi-Fi-vs-cellular.
- Доля live в часах просмотра: 30%.
- Доля DRM-защищённого просмотра: 70% (VOD-библиотека лицензирована студиями; live – неприкрытый промоконтент).
- WebRTC-интерактив: 5% от часов просмотра, средняя группа звонка – 4 участника.
- Размер библиотеки: 6 000 часов VOD.
- Live-каналы: 4 HD-канала, по 8 часов в день в среднем.
Сначала выводим суммарные часы просмотра – они драйверят почти все строки:
total_view_hours = MAU × hours_per_MAU
= 100 000 × 12
= 1 200 000 часов/месПоток в 4.0 Mbps потребляет 1.8 GB на час:
GB_per_hour = bitrate_Mbps × 3600s / 8000 (конверсия Mb→GB)
= 4.0 × 3600 / 8000
= 1.8 GBСуммарный спрос на egress за месяц:
egress_TB = 1 200 000 × 1.8 / 1024
= 2 109 TB/месЭтими тремя числами (1.2M viewer-hours, 1.8 GB/hour, 2 109 TB/мес) мы пользуемся в каждой строке ниже. Теперь – по стеку.
Строка 1 – Кодирование
VOD-кодирование – разовая трата на ассет. Новый контент за месяц – пусть 100 часов исходника = 6 000 минут – лесенка превращает примерно в пять рендиций, три из которых HD-класса. По тарифу MediaConvert professional (май 2026: $0.0150/мин HD, $0.0075/мин SD, со скидками после 100 000 нормализованных минут в месяц), 6 000 × 5 × ~$0.0115 ≈ $345/мес. Переэнкод существующей библиотеки в новый кодек (AV1 в 2026) – батч-операция, амортизируется: 6 000 × 60 × 5 × $0.0115 / 24 ≈ $863/мес амортизировано.
Live-кодирование – за канал-час:
live_channel_hours = 4 канала × 8 часов/день × 30 дней
= 960 канал-часов/месПо on-demand-ставке MediaLive HD $0.7656/ч за вход + ~$0.50/ч за HD-выход (5-ступенчатая лесенка = эффективно 2.5 HD-выхода после SD/HD-микширования), цена канал-часа выходит около $1.90. На 75%-скидке reserved 12-month commit падает до ~$0.48. Берём reserved (steady-state):
live_encoding_cost = 960 × $0.48 ≈ $461/месКодирование итого, всё включено: ~$1 670/мес. На viewer-hour: $1 670 / 1.2M = $0.0014 / час.
Строка 2 – Упаковка
CMAF-упаковка включена в стоимость энкодера на любом современном стеке. Записываем $0/мес как отдельную строку. (В модели держим, чтобы команды, которые перейдут на JIT-packaging, могли её отколоть – JIT переносит стоимость с энкодера на CPU origin, не меняя суммы, но меняя распределение.)
Строка 3 – Хранение и origin-egress
Размер библиотеки в байтах:
library_size_TB = 6 000 часов × 1.8 GB/ч × 5 рендиций / 1024
= 52.7 TBНа S3 Standard ($0.023/GB-месяц в мае 2026): 52 700 × $0.023 = $1 212/мес. С lifecycle-политикой, переносящей холодный контент в Standard-IA ($0.0125/GB-мес) после 30 дней без обращений, средневзвешенная ставка падает до примерно $0.016/GB-мес: 52 700 × $0.016 = $843/мес. Берём lifecycle.
Origin-egress при cache hit ratio 92% (реальное число для гибридной библиотеки с fat-head-распределением просмотров, то же, что в нашей статье об экономике CDN):
origin_egress_TB = total_egress_TB × (1 − cache_hit_ratio)
= 2 109 × 0.08
= 169 TB/месЕсли CDN – CloudFront с S3 origin, AWS его прощает: $0. Если CDN – Cloudflare с S3 origin, AWS выставит счёт по in-region-egress (путь S3 → Cloudflare через AWS PrivateLink идёт по $0.04/GB regional egress, не по $0.09/GB internet egress, в мае 2026 – а Cloudflare R2 origin его бы вообще обнулил). Моделируем primary CloudFront + secondary Fastly для multi-CDN, поэтому Fastly тянет origin-egress: 0.5 × 169 TB × $0.04/GB × 1024 = $3 471/мес на secondary.
Хранение + origin итого: $843 + $3 471 = $4 314/мес. На viewer-hour: $0.0036 / час.
Строка 4 – CDN-доставка
Суммарный egress 2 109 TB/мес. На single-CDN commit по $0.012/GB blended (репрезентативная ставка mid-volume-commit 2026):
cdn_cost = 2 109 × 1024 × $0.012 = $25 915/месНа multi-CDN 70% CloudFront committed + 30% Fastly committed по $0.014:
cdn_cost = 0.70 × 2 109 × 1024 × $0.012 + 0.30 × 2 109 × 1024 × $0.014
= $18 140 + $9 068 = $27 208/месMulti-CDN – номинально дороже; экономия приходит откуда-то ещё (избегание overage в пиковый месяц, региональная оптимизация ставок, премия надёжности – см. статью multi-CDN-архитектуры). В модели используем $27 208/мес, помня, что single-CDN-эквивалент = $25 915, и разница важна на этом масштабе. На viewer-hour: $0.0227 / час на multi-CDN, $0.0216 / час на single.
Строка 5 – DRM
70% часов просмотра – DRM-защищены, но DRM тарифицируется не за часы, а за license-запросы. Типично – один license-запрос на ассет на воспроизведение, не на сегмент. В индустрии оседает соотношение примерно 1 license-запрос на 30 минут (long-form OTT) – до 1 на 5 минут (short-form mobile). Берём 1 на 30 минут для гибрида:
licenses_per_month = total_view_hours × DRM_share × 60мин/час / 30мин/license
= 1 200 000 × 0.70 × 60 / 30
= 1 680 000 лицензийПо репрезентативной 2026-ставке multi-DRM SaaS $0.003 за лицензию (ставка Mux; EZDRM и BuyDRM на volume-тирах оседают в $0.001–$0.0025):
drm_cost = 1 680 000 × $0.003 = $5 040/месДоговорённый годовой commit по $0.0015 за лицензию опускает до $2 520/мес. Используем blended $0.002: $3 360/мес. На viewer-hour (по всем часам, не только защищённым): $0.0028 / час.
Строка 6 – Аналитика
QoE-аналитика тарифицируется за viewer-hour у всех крупных вендоров; различаются только ставки. Mux Data публикует pay-as-you-go около $0.0008 за viewer-минуту ($0.048 за час) на начальных тарифах, падая до $0.0005 за минуту ($0.030 за час) на mid scale; Conviva и Bitmovin Analytics в той же зоне, а в enterprise-сделках на больших объёмах падают до $0.0002 за минуту ($0.012 за час). На 1.2M viewer-hour mid-scale-ставка Mux Data $0.030/час даёт:
analytics_cost = 1 200 000 × $0.030 = $36 000/месЭта цифра шокирует в первый раз – больше счёта CDN. Поэтому подписочные продукты с высокой вовлечённостью не задерживаются на pay-per-hour-аналитике дольше первого года и либо договариваются на годовой коммит (типичное снижение 60–80%), либо переезжают на self-hosted Prometheus + ClickHouse + Grafana, который стоит фиксированные $3–5k/мес на любом объёме. Моделируем коммит по $0.008 за viewer-hour blended:
analytics_cost = 1 200 000 × $0.008 = $9 600/месНа viewer-hour: $0.008 / час.
Строка 7 – Real-time-реле (TURN + SFU)
5% часов просмотра идут через WebRTC-интерактив, средняя группа звонка – 4:
webrtc_user_hours = 0.05 × 1 200 000 = 60 000 user-hoursUser-час WebRTC на том же 4 Mbps blended даёт 1.8 GB медиа. Типичный TURN-relay-hit-rate (доля WebRTC-сессий, которые проваливаются с peer-to-peer и падают через TURN) в 2026 – около 15–20% из-за корпоративных файрволов и симметричных NAT. Берём 20%:
turn_GB = 60 000 × 1.8 GB × 0.20 = 21 600 GB = 21.6 TBПо репрезентативной ставке coturn-on-EC2 $0.085/GB outbound (EC2 internet egress немилосерден) или примерно $0.06/GB на private peered TURN:
turn_cost = 21 600 × $0.06 = $1 296/месSFU-полоса (80% не-TURN-трафика, который всё равно идёт через SFU для маршрутизации) по той же $0.085/GB egress, помноженной на SFU fan-out – для 4-человечной встречи fan-out 3 (каждый публикатор раздаёт трём подписчикам):
sfu_GB = 0.80 × 60 000 × 1.8 GB × 3 = 259 200 GB = 259 TB
sfu_cost = 259 × 1024 × $0.085 = $22 548/месПлюс SFU-compute – 4-ядерный c6i.xlarge тянет около 200 одновременных участников на mediasoup или LiveKit. Для 5% от 1.2M часов / 730 часов в месяце / 4 участников на звонок:
concurrent_calls = (60 000 / 730) × (1 / 4) ≈ 21 одновременный звонок в пике
concurrent_participants ≈ 82
sfu_compute = ceil(82 / 200) × 1 сервер × $0.20/ч × 730 ≈ $146/месReal-time-реле итого: $1 296 + $22 548 + $146 ≈ $23 990/мес. На viewer-hour (по всем 1.2M часам, потому что cost-per-MAU – операционный взгляд): $0.020 / час. На WebRTC-user-hour специально: $0.40 / час – в 20–200 раз дороже сравнимого HLS-часа. Это соотношение – самое крупное «осторожно» в статье.
Строка 8 – Инженерная команда и операции
Команда, которая отгружает и эксплуатирует семь строк выше на этом масштабе, состоит как минимум из: один backend / streaming engineer, один DevOps / SRE, один frontend / player-инженер, плюс четверть продакт-менеджера и четверть дизайнера. Loaded cost на senior-рынке в Северной Америке или Западной Европе – $200–280k на FTE в год; на качественном near-shore-рынке Восточной Европы – $80–120k. Используем blended $140k loaded на FTE (типичный для гибридного Фора Софт-стиля распределения):
fte_cost = (1 + 1 + 1 + 0.25 + 0.25) × $140 000 / 12
= 3.5 × $11 667 = $40 833/месПлюс монитор-стек (Datadog $3 500/мес на этот размер), incident-tooling, AWS Business Support по 10% от AWS-спенда с минимумом $5 000/мес, и контингент на один продакшен-инцидент в 90 дней (~$4 000 инженерного времени + partner-credit-обращения) ≈ $1 300/мес амортизировано. Инженерная строка итого: ~$50 000/мес. На viewer-hour: $0.042 / час.
Суммарный счёт
Складываем восемь строк:
| Строка | $/мес | $/viewer-hour | % счёта |
|---|---|---|---|
| 1. Кодирование | $1 670 | $0.0014 | 1.3% |
| 2. Упаковка | $0 | $0 | 0% |
| 3. Хранение + origin-egress | $4 314 | $0.0036 | 3.5% |
| 4. CDN-доставка | $27 208 | $0.0227 | 21.9% |
| 5. DRM | $3 360 | $0.0028 | 2.7% |
| 6. Аналитика | $9 600 | $0.0080 | 7.7% |
| 7. Real-time-реле | $23 990 | $0.0200 | 19.3% |
| 8. Инженерия и операции | $50 000 | $0.0417 | 40.3% |
| Итого | $124 142 | $0.1035 / час | 100% |
На MAU: $124 142 / 100 000 = $1.24 на MAU в месяц, или $14.90 на MAU в год. Если продукт продаётся по $7.99/мес с целевой маржой 10% (потолок расходов 90% = $7.19), cost-per-MAU должен упасть примерно на 14%, чтобы экономика сошлась – то есть продукт либо на неправильном тарифе, либо имеет неиспользованный upsell, либо нуждается в конкретной оптимизации трёх самых крупных строк: инженерия (40%), CDN (22%) и real-time-реле (19%). Ради этого и пишется XL-статья.
Как кривая гнётся при масштабе
Заголовочный вопрос любой cost-презентации: как выглядит тот же продукт на 10k MAU, на 1M, на 10M? Разные строки масштабируются по-разному, поэтому кривая гнётся неочевидно.
Кодирование примерно плоское по росту библиотеки, линейное по новым live-канал-часам и почти нечувствительное к MAU. Библиотека на 6 000 часов исходника требует того же энкодер-прохода на 10× пользователях – cost-per-viewer-hour строки кодирования падает в 10 раз.
Хранение – плоское по MAU, линейное по размеру библиотеки. Та же форма, что у кодирования: на фиксированной библиотеке cost-per-viewer-hour падает с ростом пользователей.
Origin-egress – линейный по спросу на egress, демпфирован cache-hit-ratio. На 10× cache-hit-ratio растёт (long-tail-контент становится теплее, когда больше одновременных зрителей делят горячий набор), и origin-egress на viewer-hour падает примерно на 25% при переходе 100k → 1M MAU.
CDN-доставка – линейная по отгруженным байтам, но цена за GB падает по тирам. На 1M MAU с тем же профилем вовлечённости спрос на egress становится 21 000 TB/мес. CloudFront-публичная сетка перевалит $0.020/GB на петабайтном масштабе, а commit-контракт на таком объёме сядет около $0.006/GB blended. Cost-per-viewer-hour CDN падает примерно в 2 раза при переходе 100k → 1M MAU – но только если перезаключить контракт.
DRM – линейный по защищённым license-запросам с тир-дисконтами. На 1M MAU и 16.8M лицензиях/мес тарифицированная SaaS-ставка садится около $0.0008/license; строка масштабируется суб-линейно. На viewer-hour падает примерно на 60%.
Аналитика – линейная по viewer-hours с тир-дисконтами. На 12M viewer-hours/мес commit садится на $0.003/час; на viewer-hour падает примерно на 60%. Эта строка чаще всего флипается из «шокирующей» на 100k MAU в «скучную» на 1M MAU.
Real-time-реле – линейные по WebRTC-user-hours, без тир-дисконтов, если не торговать IP-transit напрямую. Эта строка масштабируется хуже всех, потому что cost доминирован пропускной способностью, а bandwidth на масштабе падает только если строить собственный peering. На viewer-hour остаётся примерно плоской.
Инженерия – примерно логарифмическая по MAU: команда, эксплуатирующая 10k MAU, и команда, эксплуатирующая 1M MAU – это те же 5–8 человек при правильной архитектуре, и она удваивается только за 10M MAU. На viewer-hour падает почти в 10 раз между 100k и 1M MAU. Именно поэтому cost-per-viewer-hour резко падает между $100k и $1M MAU, а потом выпрямляется.
| MAU | Месячный счёт | $/viewer-hour | $/MAU | $/MAU/год |
|---|---|---|---|---|
| 10 000 | $58 200 | $0.485 | $5.82 | $69.84 |
| 100 000 | $124 142 | $0.103 | $1.24 | $14.90 |
| 1 000 000 | $580 000 | $0.048 | $0.58 | $6.96 |
| 10 000 000 | $4 400 000 | $0.037 | $0.44 | $5.28 |
«Локоть» кривой живёт между 100k и 1M MAU – диапазон, в котором коммиты CDN, DRM и аналитики достигают своих нелинейных скидок, а инженерная строка ещё амортизируется по маленькой базе. Продукт за $5/мес должен пройти локоть прежде, чем юнит-экономика стабилизируется; продукт за $20/мес может остаться ниже локтя на нишевой аудитории. Форма этой кривой, больше любого другого факта, решает, можно ли запустить streaming-стартап на венчурных деньгах.
Build vs buy: точка переключения для каждой строки
У каждой из восьми строк есть buy-it-опция, build-it-опция и переходный MAU, после которого build-it обычно выигрывает. Точка решается двумя соотношениями: какая часть нагрузки общая (SaaS-вендор амортизирует по многим клиентам) и какая – продукт-специфичная (работа всё равно живёт у вашей инженерной команды), и сколько FTE на самом деле стоит build-путь.
Кодирование. Buy SaaS (MediaConvert, Bitmovin Encoding, Mux Encoding) пока не кодируете больше ~5 000 часов контента в месяц или не гоняете больше 30 одновременных live-каналов. Дальше – Kubernetes-оркестрованная FFmpeg / SVT-AV1-ферма на spot-инстансах – 60–80% дешевле на байтах, но добавляет 1.5–2.0 FTE инженерных. Переход: ~$25 000/мес SaaS-кодирования.
Упаковка. Buy bundled. Собственный CMAF-packager не экономит реальных денег и добавляет редкие, но болезненные баги вокруг границ сегментов, init-сегментов и вклеивания DRM-ключей.
Origin. Buy managed (S3, Cloud Storage, Wasabi, Backblaze B2) на любом масштабе. Self-hosted origin экономит single-digit процентов ценой множества FTE-часов в квартал на operational firefighting.
CDN. Buy коммерческий CDN, пока не перевалите ~$200 000/мес CDN-спенда – после чего собственный кэширующий слой поверх bare-metal-нод в 3–4 ЦОДах начинает окупаться. Даже тогда большинство команд этого размера держат гибрид – коммерческий CDN как третий тир, кастомный edge для топ-talker-контента. Переход: ~$2M годового CDN-спенда.
DRM. Buy SaaS до ~10M лицензий/мес. Выше – self-hosted Widevine / FairPlay / PlayReady-триплет начинает окупаться, но «сертификатный танец» с Apple и регуляторика по FairPlay по-прежнему операционно дороги. Переход: ~$30 000/мес DRM-SaaS-спенда.
Аналитика. Buy SaaS до ~$200 000/мес аналитики, после чего self-hosted Prometheus / ClickHouse / Grafana окупается. Stack – 0.5–1 FTE постоянно, пока он живёт; вендоры на умеренных объёмах оценивают ниже. Переход: ~$200 000/мес – далеко выше, чем большинство команд ожидают.
Real-time-реле. Buy managed (Twilio, LiveKit Cloud, Daily, 100ms, Mux Real-Time) на низком масштабе. Build (coturn на EC2 + self-hosted mediasoup или LiveKit) на умеренном масштабе, потому что SaaS-наценка над raw bandwidth – 5–10×, а WebRTC-строка доминирована bandwidth. Переход необычно низкий: ~$10 000/мес managed-real-time.
Инженерия. Это ответ на «должны ли мы строить остальные семь?», не строка, которую выбирают buy или build. Переходы выше предполагают, что вы можете нанять и удержать FTE по указанной loaded-cost; если не можете, все переходы сдвигаются выше.
| Строка | Переход (SaaS $/мес) | Окупаемость build (FTE-мес) |
|---|---|---|
| Кодирование | $25 000 | 12–18 |
| Упаковка | n/a – никогда не build | n/a |
| Origin / хранение | n/a – никогда не build | n/a |
| CDN | $200 000 | 24–36 |
| DRM | $30 000 | 9–12 (плюс регуляторика) |
| Аналитика | $200 000 | 9–12 |
| Real-time-реле | $10 000 | 6–9 |
| Инженерия | n/a | n/a |
Подводные камни: три строки, которые большинство моделей считают неправильно
Если модель выше говорит, что какая-то строка дороже CDN, это нужно перепроверить – и потом ей поверить. Три строки выглядят маленькими на слайде и взрываются в счёте.
Подводный камень 1 – Mismatch счётчика аналитики. Подписочный продукт с пятью часами вовлечённости на MAU в месяц платит за аналитику в 5 раз больше, чем ad-supported продукт с одним часом, на тех же MAU. Ошибка – прогнозировать аналитику от MAU, а не от viewer-hours. Всегда моделируйте аналитику от кривой вовлечённости.
Подводный камень 2 – Origin-egress в multi-CDN. Переезд с CloudFront-on-S3 на Cloudflare-on-S3 экономит edge-egress и удивляет вас $5 000–$30 000/мес новой строки origin-egress, у которой в исходном квоте CloudFront не было эквивалента. Решение: либо запустить origin-shield, либо перевезти origin к peered cloud-storage-провайдеру (R2, если вы на Cloudflare; B2 при предзаключённой Backblaze-Fastly transit-сделке; Wasabi при предзаключённом договоре), либо договориться держать origin внутри облака с primary CDN.
Подводный камень 3 – WebRTC-bandwidth на масштабе. 5% WebRTC-трафика на 100k-MAU-приложении – это 19% счёта в проработанной модели. 10% WebRTC на том же приложении – 30%. Команды, которые «строят небольшой интерактивный фичер поверх VOD-библиотеки», регулярно отгружают более дорогой продукт, чем чисто-конференционный, потому что VOD-библиотека маскировала, сколько на самом деле стоит WebRTC-строка на пользователя. Всегда моделируйте WebRTC-трафик отдельной строкой, не как разновидность CDN-трафика – и цельтесь в TURN-relay-hit-ratio ниже 15%, инвестируя в калькулятор TURN-bandwidth до запуска, а не после.
Чувствительность: что больше всего двигает счёт?
Если оптимизировать одну ручку, чтобы сдвинуть счёт – какую? Tornado-чарт по 100k-MAU-модели говорит: средний битрейт рендиции. 25%-ный срез среднего битрейта (отгрузка AV1 и снятие 1080p high-quality-ступени) экономит $6 800/мес напрямую на CDN – 5.5% всего счёта – не трогая ничего больше. Это территория per-title encoding; техника покрыта в статье о per-title и per-shot лесенке битрейтов.
Вторая по силе ручка – ставка аналитики: переговоры с $0.030/час pay-as-you-go на $0.008/час committed-use дают разницу $26 400/мес на этом объёме. Третья – ставка CDN per GB на commit. Четвёртая – WebRTC TURN-hit ratio (каждые 5% снижения экономят около $1 000/мес на real-time-реле).
Ручки, которые двигают счёт меньше всего: storage-тир (single-digit-доллары на процент), оптимизация упаковки (уже ноль) и переключение DRM-провайдера на этом объёме (несколько процентов в лучшем случае).
Частая ошибка: путать concurrent с MAU
Самая частая ошибка моделирования – мешать пиковый concurrent с monthly active. CDN-сейлы квотируют от пикового concurrent (потому что он драйверит 95-перцентильный счёт и provisioning под burst-capacity). Product и финансы прогнозируют от MAU (потому что MAU драйверит выручку). Две связаны моделью вовлечённости и распределения во времени: типично concurrent-пик – 5–15% от MAU для live-heavy-продукта и 0.5–2% для VOD-only, в зависимости от распределения по дню недели и времени суток.
Для 100k-MAU-модели с 30% live-долей и субботне-вечерним пиком, накладывающимся на один hero-матч, пиковый concurrent – 4 000–8 000. Burst-capacity CDN должен быть посчитан на 4 000 × 4 Mbps = 16 Gbps, хотя средняя утилизация ближе к 6 Gbps. Если контракт coммитит на среднюю, вы платите overage каждый пик; если коммитит на пиковую, вы платите за headroom, который не используете большую часть месяца. Правильный контракт коммитит чуть ниже средней и аккуратно структурирует overage – покрыто в статье об экономике CDN.
Где встроена Фора Софт
Мы строим и эксплуатируем стриминг-продукты в этом cost-режиме с 2005 года – в видеоконференциях, OTT, телемедицине, e-learning, surveillance и AR/VR – и восьми-строчная модель выше – это та модель, которой мы пользовались при проектировании архитектуры и при переговорах с вендорами на большинстве из 239+ проектов, которые мы поставили. Команды обычно приходят к нам в локоть cost-кривой: продукт, который прошёл 50 000–100 000 MAU, начинает чувствовать укусы аналитики и CDN-счетов и нуждается в architecture review, который перевернётся в перезаключённые commits, другую ladder-стратегию или решение build-vs-buy по real-time-реле. Мы не продаём SaaS-компоненты модели – мы команда, которая помогает выбрать и эксплуатировать их, и кросс-ссылаем сервис-страницу video-streaming для engagement, которым нужен архитектурный партнёр end-to-end.
Ключевые выводы
- Валовая маржа стриминг-продукта стоит на восьми строках, не одной – CDN громкий, но не всегда самый большой.
- Кривая cost-per-viewer-hour резко гнётся между 100k и 1M MAU; ниже доминирует инженерия, выше – CDN.
- Аналитика на pay-per-hour-счётчике тихо обгоняет CDN на подписочных продуктах с высокой вовлечённостью – перетарифицировать на commit заранее.
- Origin-egress – скрытая строка при переезде с in-cloud CDN на third-party CDN – $5–30k/мес сюрпризов.
- WebRTC-трафик стоит в 20–200 раз на user-hour то, что HLS – никогда не моделируйте его как разновидность CDN.
- Самая мощная одиночная ручка – средний битрейт рендиции – каждые 25% среза экономят 5–7% всего счёта.
- Точки перехода build-vs-buy разные: real-time-реле переходят на $10k/мес, CDN – на $200k/мес.
Что читать дальше
- Экономика CDN: 95-й перцентиль, commit, overage, transit – глубокий разбор самой громкой строки этой модели.
- Построение лесенки битрейтов: классическая Netflix-лесенка, per-title, per-shot – самая сильная ручка в чувствительности.
- DRM 101: почему три системы и почему отгружаются все три – операционная логика DRM-строки.
CTA
- Поговорите с инженером стриминга. Принесите ваш восьми-строчный счёт; мы скажем, какие две строки заслуживают следующего квартала оптимизации.
- Посмотрите наши кейсы. Реальные архитектуры за проработанной моделью этой статьи.
- Скачайте рабочий лист. Streaming Cost Model – One-Page Worksheet – восьми-строчный шаблон, конверсии единиц и таблица чувствительности на одном листе.