Start typing to search across invoices, services, domains, tickets, and more...
Чтобы запустить собственную платформу live-трансляций для зрителей в Азии, разместите origin на SRS (или nginx-rtmp) на выделенном сервере в Гонконге, Токио или Сингапуре, принимайте поток по RTMP или SRT, отдавайте HLS и WebRTC, а раздачу зрителям доверьте CDN. У IMIDC есть всё необходимое: выделенные серверы в Гонконге от $139/мес с маршрутом CN2 GIA в материковый Китай, выделенные серверы в Японии, серверы в Сингапуре по запросу, аплинки 10 Гбит/с, защита от DDoS и CDN IMIDC.
Платформа трансляций состоит из четырёх этапов: приём, origin/упаковка, распространение и воспроизведение.
Типичные сценарии: вебинары и корпоративные собрания, онлайн-обучение, запуски продуктов и мероприятия, игровые и киберспортивные трансляции — когда нужны свой бренд, контроль доступа и записи вместо сторонней платформы.
На вход — RTMP или SRT, для масштаба — HLS, а WebRTC — только там, где важна интерактивность.
| Протокол | Роль | Типичная задержка | Для чего лучше |
|---|---|---|---|
| RTMP | Приём | 1–3 с до origin | Поддерживается всеми OBS и энкодерами |
| SRT | Приём | Настраивается, от долей секунды до нескольких секунд | Каналы с потерями, дальние площадки |
| HLS | Воспроизведение | Около 6–20 с | Большая аудитория через CDN, любые устройства |
| LL-HLS | Воспроизведение | Около 2–5 с | Мероприятия с активным чатом; нужна поддержка упаковщика и CDN |
| HTTP-FLV | Воспроизведение | Около 1–3 с | Веб-плееры, популярные на ряде азиатских рынков |
| WebRTC (WHIP/WHEP) | Приём и воспроизведение | Менее 1 с | Интерактивные занятия, аукционы, совместный эфир; дороже на зрителя |
SRS обрабатывает RTMP, SRT, HLS, HTTP-FLV и WebRTC в одном процессе. Если вам нужен именно LL-HLS с частичными сегментами, сначала убедитесь, что его поддерживают и упаковщик, и CDN, и только потом обещайте зрителям низкую задержку.
SRS отлично работает в Docker; важно правильно задать порты, публичный IP-кандидат для WebRTC и постоянные каталоги.
mkdir -p /opt/srs/conf /opt/srs/html /opt/srs/record
# put srs.conf (below) into /opt/srs/conf/srs.conf, then:
docker run -d --name srs --restart unless-stopped \
-p 1935:1935 -p 1985:1985 -p 8080:8080 \
-p 8000:8000/udp -p 10080:10080/udp \
-e CANDIDATE=203.0.113.20 \
-v /opt/srs/conf/srs.conf:/usr/local/srs/conf/srs.conf \
-v /opt/srs/html:/usr/local/srs/objs/nginx/html \
-v /opt/srs/record:/usr/local/srs/objs/record \
ossrs/srs:5 ./objs/srs -c conf/srs.conf
docker logs -f srs # watch publish / play events
ufw allow 1935/tcp; ufw allow 8000/udp; ufw allow 10080/udp
Готовый к продакшну srs.conf с HLS, HTTP-FLV, WebRTC, SRT, записью и хуком публикации:
listen 1935;
max_connections 3000;
daemon off;
srs_log_tank console;
http_api { enabled on; listen 1985; }
http_server { enabled on; listen 8080; dir ./objs/nginx/html; }
rtc_server { enabled on; listen 8000; candidate $CANDIDATE; }
srt_server { enabled on; listen 10080; }
vhost __defaultVhost__ {
hls {
enabled on;
hls_fragment 2;
hls_window 12;
hls_path ./objs/nginx/html;
hls_m3u8_file [app]/[stream].m3u8;
hls_ts_file [app]/[stream]-[seq].ts;
hls_cleanup on;
}
http_remux { enabled on; mount [vhost]/[app]/[stream].flv; }
rtc { enabled on; rtmp_to_rtc on; rtc_to_rtmp on; }
srt { enabled on; srt_to_rtmp on; }
dvr {
enabled on;
dvr_plan session;
dvr_path ./objs/record/[app]/[stream]/[2006]-[01]-[02]_[15][04][05].mp4;
}
http_hooks {
enabled on;
on_publish http://127.0.0.1:8085/api/streams/on_publish;
}
play { gop_cache on; }
}
Отправьте поток из OBS или ffmpeg и проверьте воспроизведение:
# OBS (RTMP): Server rtmp://203.0.113.20/live Stream key event1?secret=YOUR_KEY
# SRT push from ffmpeg (OBS can also output SRT):
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 4000k -g 60 \
-c:a aac -b:a 128k -f mpegts \
"srt://203.0.113.20:10080?streamid=#!::r=live/event1,m=publish"
# Playback URLs
# HLS http://203.0.113.20:8080/live/event1.m3u8
# HTTP-FLV http://203.0.113.20:8080/live/event1.flv
# WebRTC http://203.0.113.20:1985/rtc/v1/whep/?app=live&stream=event1 (WHEP)
hls_fragment 2.CANDIDATE должен быть публичным IP сервера, иначе WebRTC-плееры не подключатся.on_publish позволяет приложению проверять ключ потока: ответ HTTP 200 с телом 0 разрешает публикацию, любой другой — отклоняет.Для адаптивного битрейта добавьте транскодер ffmpeg, публикующий дополнительные качества, и сошлитесь на них из мастер-плейлиста:
# simple ABR ladder: pull the source from SRS and publish 720p + 480p renditions
ffmpeg -i rtmp://127.0.0.1/live/event1 \
-map 0:v -map 0:a -c:v libx264 -preset veryfast -s 1280x720 -b:v 2500k -g 60 \
-c:a aac -b:a 128k -f flv rtmp://127.0.0.1/live/event1_720 \
-map 0:v -map 0:a -c:v libx264 -preset veryfast -s 854x480 -b:v 1000k -g 60 \
-c:a aac -b:a 96k -f flv rtmp://127.0.0.1/live/event1_480
Предпочитаете nginx-rtmp? Он лёгкий и покрывает связку RTMP → HLS, но не умеет SRT и WebRTC «из коробки»:
# nginx-rtmp alternative (nginx.conf, top level)
rtmp {
server {
listen 1935;
application live {
live on;
hls on;
hls_path /var/www/hls;
hls_fragment 2s;
hls_playlist_length 12s;
on_publish http://127.0.0.1:8085/api/streams/on_publish;
}
}
}
Пиковый исходящий трафик равен числу одновременных зрителей, умноженному на средний битрейт, плюс около 10% накладных расходов протокола.
| Одновременных зрителей | Средний битрейт | Пиковый исходящий | Трафик за час |
|---|---|---|---|
| 50 | 2,5 Мбит/с | 125 Мбит/с | около 56 ГБ |
| 200 | 2,5 Мбит/с | 500 Мбит/с | около 225 ГБ |
| 1 000 | 3 Мбит/с | 3 Гбит/с | около 1,35 ТБ |
| 3 000 | 2 Мбит/с (микс ABR) | 6 Гбит/с | около 2,7 ТБ |
| 10 000 | 2 Мбит/с (микс ABR) | 20 Гбит/с | около 9 ТБ |
Формула: ГБ в час = Мбит/с × 3600 / 8 / 1000. Один origin с аплинком 10 Гбит/с с запасом обслужит напрямую несколько сотен зрителей; дальше зрителей нужно переводить на CDN, а origin будет питать только кэш CDN. Входящий поток по сравнению с этим мал: 4–6 Мбит/с на один 1080p-поток ведущего.
Пусть CDN забирает HLS с origin по HTTPS, долго кэширует сегменты и около секунды — плейлисты.
# Nginx in front of SRS as the HTTPS origin for the CDN
server {
listen 443 ssl;
http2 on;
server_name origin-live.example.com;
ssl_certificate /etc/nginx/ssl/origin-live.crt;
ssl_certificate_key /etc/nginx/ssl/origin-live.key;
location ~ \.m3u8$ {
proxy_pass http://127.0.0.1:8080;
add_header Cache-Control "max-age=1" always;
add_header Access-Control-Allow-Origin "*" always;
}
location ~ \.(ts|m4s)$ {
proxy_pass http://127.0.0.1:8080;
add_header Cache-Control "max-age=86400" always;
add_header Access-Control-Allow-Origin "*" always;
}
}
.m3u8) меняются с каждым сегментом, поэтому кэшируйте их на 1–2 секунды; сегменты неизменны — кэшируйте надолго.Записывайте каждую трансляцию на origin, а готовые файлы переносите в объектное хранилище для повторов и просмотра по запросу.
# move finished recordings to S3-compatible object storage every 10 minutes (cron)
*/10 * * * * rclone move /opt/srs/record s3store:live-archive --min-age 10m --delete-empty-src-dirs
Каталог записи в конфигурации выше находится вне публичной веб-директории, поэтому исходные записи нельзя скачать, угадав URL. Для долгосрочного архива используйте отдельный сервер хранения или бакет объектного хранилища, а опубликованные повторы транскодируйте в HLS-лестницу.
Размещайте origin ближе к ведущим и основной аудитории и защищайте публичные точки входа.
| Локация origin | Лучшая аудитория | Примечания |
|---|---|---|
| Гонконг | Материковый Китай, Гонконг, Большой Китай | CN2 GIA (AS4809) в материковый Китай, хостингу не нужна ICP-регистрация |
| Токио, Япония | Япония, Южная Корея, Тихоокеанский регион | Нативные японские IP; на VPS есть опция оптимизированного маршрута CN2 в Китай |
| Сингапур | Юго-Восточная Азия, Индия, Океания | Настраивается по запросу через отдел продаж IMIDC |
| Тайбэй / Сеул / Бангкок | Мероприятия для одной страны | Локальные нативные IP для зрителей внутри страны |
Размер origin определяется числом ведущих, нагрузкой транскодирования и тем, сколько трафика берёт на себя CDN.
Если много зрителей в материковом Китае, обычно выбирают Гонконг, так как серверы IMIDC там используют China Telecom CN2 GIA. Токио подходит для Японии и Кореи, Сингапур — для Юго-Восточной Азии; для смешанной аудитории используйте один origin плюс CDN.
При 3 Мбит/с на зрителя нужно около 3 Гбит/с пикового исходящего трафика и примерно 1,35 ТБ в час. Поэтому аудиторию такого размера стоит обслуживать через CDN, а не напрямую с origin.
SRS поддерживает RTMP, SRT, HLS, HTTP-FLV и WebRTC в одном сервере и имеет HTTP API, поэтому это более полное решение. nginx-rtmp легче и подходит для простых сценариев RTMP → HLS.
Для этого нужен WebRTC, который намного тяжелее HLS в расчёте на зрителя и не кэшируется обычными CDN. Большинство платформ используют WebRTC для ведущих и активных участников, а HLS или LL-HLS — для широкой аудитории.
Да. IMIDC предлагает защиту от DDoS, которую можно подключить к серверам, работающим как origin. Сообщите отделу продаж ожидаемый масштаб мероприятий, чтобы защита и порты соответствовали трафику.
Планируете собственную стриминговую платформу? Начните с выделенного сервера в Гонконге или в Токио и CDN IMIDC, либо откройте тикет — команда IMIDC поможет подобрать origin.