開始輸入,可搜尋發票、服務、域名、工單,以及 更多...
搭建影片點播(VOD)或短影片平台後端需要四樣東西:存放原片和轉碼檔案的儲存型獨立伺服器、輸出 HLS 多位元速率階梯的 ffmpeg 轉碼流水線、MinIO 這類相容 S3 的物件儲存,以及承擔大部分頻寬的 CDN。IMIDC 在香港(CN2 GIA 直連大陸)、東京、新加坡、洛杉磯等亞太節點提供這些基礎設施:香港獨立伺服器每月 $139 起,洛杉磯獨立伺服器每月 $499 起,配套 10Gbps 上行、DDoS 防護和 IMIDC CDN。
所有影片平台都遵循同一條流水線:上傳、儲存原片、轉碼、儲存各檔位元速率、經 CDN 分發。
master.m3u8,CDN 缺失的切片再回源到儲存伺服器。後設資料(標題、作者、播放量、稽核狀態)放在 API 伺服器的常規資料庫裡;影片檔案本身放在儲存伺服器上。
每個影片一次編碼出多檔解析度,並對齊關鍵幀,播放器才能平滑切換清晰度。
mkdir -p out/v0 out/v1 out/v2 out/v3
ffmpeg -i input.mp4 \
-filter_complex "[0:v]split=4[a][b][c][d];[a]scale=-2:1080[v0];[b]scale=-2:720[v1];[c]scale=-2:480[v2];[d]scale=-2:360[v3]" \
-map "[v0]" -c:v:0 libx264 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 7500k \
-map "[v1]" -c:v:1 libx264 -b:v:1 2800k -maxrate:v:1 3000k -bufsize:v:1 4200k \
-map "[v2]" -c:v:2 libx264 -b:v:2 1400k -maxrate:v:2 1500k -bufsize:v:2 2100k \
-map "[v3]" -c:v:3 libx264 -b:v:3 800k -maxrate:v:3 856k -bufsize:v:3 1200k \
-map a:0 -map a:0 -map a:0 -map a:0 -c:a aac -b:a 128k -ac 2 \
-preset medium -profile:v high -pix_fmt yuv420p \
-force_key_frames "expr:gte(t,n_forced*2)" -sc_threshold 0 \
-f hls -hls_time 4 -hls_playlist_type vod -hls_flags independent_segments \
-hls_segment_filename "out/v%v/seg_%04d.ts" \
-master_pl_name master.m3u8 \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3" \
out/v%v/index.m3u8
| 檔位 | 解析度(16:9) | 影片位元速率 | 音訊 | 典型觀眾 |
|---|---|---|---|---|
| 1080p | 1920x1080 | 5,000 kbps | 128 kbps AAC | 電腦、電視、Wi-Fi |
| 720p | 1280x720 | 2,800 kbps | 128 kbps AAC | 4G/5G 訊號良好的手機 |
| 480p | 854x480 | 1,400 kbps | 128 kbps AAC | 擁塞的行動網路 |
| 360p | 640x360 | 800 kbps | 128 kbps AAC | 弱訊號、省流量模式 |
-force_key_frames "expr:gte(t,n_forced*2)" 不論幀率都每 2 秒插入一個關鍵幀,-sc_threshold 0 保證各檔位關鍵幀對齊。短影片 App 的體驗取決於首幀時間,因此要用小切片、精簡階梯和預載入預覽。
# vertical short video: 3-step ladder, 2 s segments for a fast first frame
ffmpeg -i clip.mp4 \
-filter_complex "[0:v]split=3[a][b][c];[a]scale=1080:-2[v0];[b]scale=720:-2[v1];[c]scale=540:-2[v2]" \
-map "[v0]" -c:v:0 libx264 -b:v:0 3500k -maxrate:v:0 3750k -bufsize:v:0 5000k \
-map "[v1]" -c:v:1 libx264 -b:v:1 2000k -maxrate:v:1 2150k -bufsize:v:1 3000k \
-map "[v2]" -c:v:2 libx264 -b:v:2 1000k -maxrate:v:2 1070k -bufsize:v:2 1500k \
-map a:0 -map a:0 -map a:0 -c:a aac -b:a 96k \
-preset medium -force_key_frames "expr:gte(t,n_forced*2)" -sc_threshold 0 \
-f hls -hls_time 2 -hls_playlist_type vod \
-hls_segment_filename "short/v%v/seg_%03d.ts" -master_pl_name master.m3u8 \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" short/v%v/index.m3u8
# cover image and a small progressive MP4 preview for feeds
ffmpeg -ss 1 -i clip.mp4 -frames:v 1 -vf scale=540:-2 short/cover.jpg
ffmpeg -i clip.mp4 -t 6 -vf scale=360:-2 -c:v libx264 -b:v 400k -an -movflags +faststart short/preview.mp4
把轉碼檔案存放在獨立伺服器上的相容 S3 物件儲存裡,並按觀看頻率分層。
# single-node MinIO on a storage dedicated server (use distributed mode across 4+ servers for HA)
docker run -d --name minio --restart unless-stopped \
-p 9000:9000 -p 9001:9001 \
-v /data/minio:/data \
-e MINIO_ROOT_USER=vodadmin \
-e MINIO_ROOT_PASSWORD=replace-with-a-long-random-secret \
minio/minio server /data --console-address ":9001"
# buckets: raw uploads (private) and hls output (public read via CDN)
mc alias set vod http://127.0.0.1:9000 vodadmin replace-with-a-long-random-secret
mc mb vod/raw
mc mb vod/hls
mc anonymous set download vod/hls
mc ilm rule add vod/raw --expire-days 180 # drop raw uploads after 180 days
mc mirror --overwrite out/ vod/hls/videos/abc123/
MinIO 採用 AGPLv3 許可,其社群版的分發方式有過調整,投產前請確認當前版本和許可條款;SeaweedFS、Garage、Ceph RGW 也是相容 S3 的可選方案。示例中的 raw 桶只是上傳暫存區;請把原片或高質量母版檔案另存到冷儲存,便於日後重新轉碼。
| 層級 | 存放內容 | 硬體 | 訪問特徵 |
|---|---|---|---|
| 熱資料 | 新影片和熱門影片的轉碼檔案 | NVMe/SSD 儲存伺服器 | CDN 持續回源 |
| 溫資料 | 長尾內容的轉碼檔案 | 大容量 HDD RAID 或糾刪碼獨立伺服器 | 偶爾回源、CDN 未命中 |
| 冷資料 | 原片和母版檔案 | 高容量 HDD 伺服器或託管的儲存機箱 | 僅在重新轉碼時讀取 |
粗略估算:上面四檔階梯合計約 10.5 Mbps,即每分鐘影片約 79 MB。1,000 小時內容的轉碼檔案約 4.7 TB,另加原片。
影片平台最大的持續成本是頻寬而不是儲存,選伺服器前先算清楚。
| 日活觀眾 | 人均觀看時長 | 平均分發位元速率 | 每月分發流量 |
|---|---|---|---|
| 1,000 | 20 分鐘 | 1.5 Mbps | 約 6.75 TB |
| 10,000 | 20 分鐘 | 1.5 Mbps | 約 67.5 TB |
| 50,000(短影片) | 30 分鐘 | 1.2 Mbps | 約 405 TB |
| 100,000 | 20 分鐘 | 1.5 Mbps | 約 675 TB |
Cache-Control,用帶版本號的路徑代替重新整理快取。源站放在觀眾所在地、且到觀眾線路最好的地方。
| 機房 | 主要觀眾 | 線路與 IP 說明 |
|---|---|---|
| 香港 | 中國大陸、香港、華語使用者 | 中國電信 CN2 GIA(AS4809);託管無需 ICP 備案 |
| 日本東京 | 日本、韓國 | 日本原生 IP;VPS 可選 CN2 中國最佳化線路 |
| 新加坡 | 東南亞、印度、大洋洲 | 通過銷售按需配置 |
| 美國洛杉磯 | 美洲,以及經優質線路訪問的大陸使用者 | 聯通 9929/4837 與 CN2 線路 |
| 台北 / 曼谷 / 吉隆坡 | 單一市場平台 | 本地原生 IP |
很多平台只在 CDN 後面放一個主源站(通常在香港或東京),等到遠端區域的回源變慢時再加第二個源站。
影片平台要對使用者上傳的內容負責,合規機制應從第一天就寫進流水線。
先用一個源站加 CDN 起步,影片庫增長後再把轉碼和儲存拆開。
至少需要 API 伺服器、執行 ffmpeg 的轉碼伺服器、部署在儲存型獨立伺服器上的 MinIO 等相容 S3 儲存,以及 CDN。IMIDC 在香港、東京、洛杉磯等亞太節點提供獨立伺服器,並有 IMIDC CDN 支撐這套架構。
大量觀眾在中國大陸就選香港,IMIDC 香港伺服器走中國電信 CN2 GIA,且託管無需 ICP 備案。東南亞選新加坡,日韓選東京;IMIDC 新加坡伺服器通過銷售按需配置。
觀眾數 × 觀看分鐘數 × 平均位元速率即可估算:日活 1 萬、人均 20 分鐘、1.5 Mbps,每月約 67.5 TB。大部分流量應由 CDN 承擔,儲存源站只處理快取未命中。
MinIO 是廣泛使用的相容 S3 儲存,在獨立伺服器上存放 HLS 切片和原片效果很好。投產前請先確認其當前許可和版本;SeaweedFS、Garage、Ceph RGW 也可作為替代。
不一定。在高核心獨立伺服器上用 ffmpeg 做 CPU 編碼,單位位元速率畫質最好,擴容也簡單。上傳量很大時 GPU 可以提速,可向 IMIDC 銷售諮詢 GPU 或高核心配置。
準備搭建自己的影片平台?瞭解香港獨立伺服器和 IMIDC CDN,或提交工單,由 IMIDC 工程師協助規劃儲存、轉碼和分發方案。