開始輸入,可搜尋發票、服務、域名、工單,以及 更多...
要為亞洲觀眾搭建自建直播平台,常見做法是:在香港、東京或新加坡的獨立伺服器上部署 SRS(或 nginx-rtmp)源站,用 RTMP 或 SRT 推流,輸出 HLS 和 WebRTC,再由 CDN 分發給觀眾。IMIDC 可以提供整套基礎設施:香港獨立伺服器每月 $139 起,走 CN2 GIA 直連大陸;另有日本獨立伺服器、可通過銷售定製的新加坡伺服器、10Gbps 上行埠、DDoS 防護以及 IMIDC CDN。
一個直播平台分為四個環節:推流、源站/封裝、分發和播放。
典型場景包括線上研討會和企業全員大會、線上課堂、新品釋出和活動直播,以及希望擁有自有品牌、許可權控制和錄影回放、而不依賴第三方平台的遊戲/電競直播。
推流用 RTMP 或 SRT,大規模分發用 HLS,只有強互動場景才用 WebRTC。
| 協議 | 用途 | 典型延遲 | 適用場景 |
|---|---|---|---|
| RTMP | 推流 | 到源站 1–3 秒 | OBS 和各類編碼器普遍支援 |
| SRT | 推流 | 可調,亞秒到數秒 | 丟包或跨遠距離上行、外場活動 |
| HLS | 播放 | 約 6–20 秒 | 經 CDN 面向大量觀眾,全終端相容 |
| LL-HLS | 播放 | 約 2–5 秒 | 需要較快彈幕互動的活動;需封裝器和 CDN 支援 |
| HTTP-FLV | 播放 | 約 1–3 秒 | 部分亞洲市場常用的 Web 播放器 |
| WebRTC(WHIP/WHEP) | 推流與播放 | 1 秒以內 | 互動課堂、拍賣、連麥;單觀眾資源消耗更高 |
SRS 單個程序即可同時支援 RTMP、SRT、HLS、HTTP-FLV 和 WebRTC。如果確實需要帶分片(partial segments)的 LL-HLS,請先確認封裝器和 CDN 都支援,再向觀眾承諾低延遲。
SRS 很適合 Docker 部署,需要注意的只有埠、WebRTC 候選 IP 和持久化目錄。
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 Mbps | 125 Mbps | 約 56 GB |
| 200 | 2.5 Mbps | 500 Mbps | 約 225 GB |
| 1,000 | 3 Mbps | 3 Gbps | 約 1.35 TB |
| 3,000 | 2 Mbps(多位元速率混合) | 6 Gbps | 約 2.7 TB |
| 10,000 | 2 Mbps(多位元速率混合) | 20 Gbps | 約 9 TB |
換算公式:每小時 GB = Mbps × 3600 ÷ 8 ÷ 1000。單臺 10Gbps 上行的源站直接服務幾百名觀眾綽綽有餘;再往上就應讓觀眾走 CDN,源站只給 CDN 快取供流。相比之下推流頻寬很小:每路 1080p 約 4–6 Mbps。
讓 CDN 通過 HTTPS 從源站拉取 HLS,切片長快取,播放列表只快取約 1 秒。
# 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 秒即可;切片內容不會變化,可以長期快取。每場直播都在源站錄製,結束後把檔案轉移到物件儲存,用於回放和點播。
# 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
上面配置中的錄製目錄不在公開 Web 目錄下,猜不到 URL 也就下載不到原始錄影。長期歸檔建議放在單獨的儲存伺服器或物件儲存桶中;如需釋出回放,再轉碼成 HLS 多位元速率。
源站儘量靠近主播和主要觀眾,並保護所有公網入口。
| 源站位置 | 主要觀眾 | 說明 |
|---|---|---|
| 香港 | 中國大陸、香港、大中華區 | CN2 GIA(AS4809)直連大陸,託管無需 ICP 備案 |
| 日本東京 | 日本、韓國、環太平洋 | 日本原生 IP;VPS 可選 CN2 中國最佳化線路 |
| 新加坡 | 東南亞、印度、大洋洲 | 通過 IMIDC 銷售按需開通 |
| 台北 / 首爾 / 曼谷 | 單一國家/地區活動 | 本地原生 IP,適合當地觀眾 |
根據主播數量、轉碼負載以及 CDN 承擔的流量來確定源站規格。
如果大量觀眾在中國大陸,通常選香港,因為 IMIDC 香港伺服器走中國電信 CN2 GIA 線路。日本和韓國觀眾適合東京,東南亞適合新加坡;觀眾分佈較雜時,用一個源站加 CDN 即可。
按每人 3 Mbps 計算,峰值出口約 3 Gbps,每小時約 1.35 TB 流量。這種規模應通過 CDN 分發,而不是讓源站直接服務觀眾。
SRS 在一個服務裡同時支援 RTMP、SRT、HLS、HTTP-FLV 和 WebRTC,並自帶 HTTP API,功能更完整。nginx-rtmp 更輕量,適合簡單的 RTMP 轉 HLS 場景。
亞秒級延遲需要 WebRTC,而 WebRTC 單觀眾消耗遠高於 HLS,且普通 CDN 無法快取。多數平台對主播和互動嘉賓用 WebRTC,對大量普通觀眾用 HLS 或 LL-HLS。
可以。IMIDC 提供可附加在直播源站伺服器上的 DDoS 防護。請把預期的活動規模告知銷售,以便防護和埠配置與實際流量匹配。
正在規劃自己的直播平台?可以從香港獨立伺服器或東京獨立伺服器加 IMIDC CDN 起步,或提交工單,由 IMIDC 團隊幫你評估源站規格。