iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0

進度說明

// TODO LIST
1. 製作 iOS shortcut 開啟相簿,選影片,叫瀏覽器出來 PUT 到指定網址
2. 用較為輕鬆的方式取號 Pre-Signed URL,因為不是每次都可以快速拿出終端介面呼叫指令
3. 架構圖更新

前言

前一回,進行了 Nginx + RTMP Module Plugin,還沒解釋那些東西是什麼,先來簡要說明。

RTMP

特點

  • 歷史悠久:最早由 Macromedia(後來 Adobe)為 Flash Player 發明
  • 協定:基於 TCP,維持持久連線(像 WebSocket 一樣
  • 延遲低:常見延遲 ~1–2 秒,非常適合「推流 → 播放」
  • 用途:上傳(推流)最常見,OBS → RTMP server

問題:

  • 瀏覽器不支援**(Chrome/Firefox/Safari 都砍掉 Flash,沒原生 RTMP 播放器)**
  • 行動裝置(iOS/Android)也不支援
  • 所以 RTMP 幾乎只剩下「推流協定」的角色,而不是播放協定。

HLS

特點

  • HTTP Live Streaming, 由 Apple 推出
  • 基於 HTTP:跟一般網頁請求一樣,用 .m3u8 (playlist) + .ts (片段)
  • 兼容性好:
    • iOS Safari 原生支援
    • Chrome/Firefox 可用 hls.js 播放
    • Android 也能播**
  • CDN 友好:因為就是靜態檔案(.m3u8、.ts)
  • 可以放在 CloudFront / Akamai / Nginx cache
  • 可自適應串流 (ABR):一條直播可以切多個解析度,播放器根據網速自動切換

缺點

  • 延遲比較高:通常 6–30 秒
  • 互動性差:不適合「即時通訊」或「遊戲直播」

比較表

特性 RTMP HLS
延遲 1–2 秒 6–30 秒
支援平台 Flash Player、OBS、FFmpeg iOS、Android、各大瀏覽器
通訊協定 TCP, 持久連線 HTTP, 分段請求
使用場景 推流 (主播上傳) 播放 (觀眾觀看)
CDN 支援 不佳 非常好
發展現況 已被淘汰(Adobe 停止 Flash) 主流(YouTube Live, Twitch, FB Live 全用 HLS/DASH)

小結

  • RTMP 適合「上傳」 → 因為 OBS、FFmpeg、各種推流工具支援最好
  • HLS 適合「下載」 → 因為 所有瀏覽器和行動裝置都能播

轉檔與合併

  • 在前一回因為產出了一堆 .ts 每個檔案都包含了三秒的串流內容, HLS 播放清單 (.m3u8) 保留的時間長度表示使用者可以回去看 30 秒內的重播
  • 直接扔進 S3 不是好方法,理由是因為,不斷地去呼叫 API upload 檔案,會產生一堆呼叫費用
  • 合理的做法,要先合成 .ts 之後,再上傳喔
    https://ithelp.ithome.com.tw/upload/images/20250913/20130149hoccxUUHxn.png
  • 從上圖可以看出,一個 ts 大小,大約是 2389856 bytes ~ 2456408 bytes,大約 2.4 MB

做法

先彙整檔案清單,再用指令合成!

  1. 把檔案名稱抄錄到 file_list.txt
    for f in ironman-*.ts; do echo "file '$f'" >> file_list.txt; done
    
  2. ffmpeg 指令合成
    ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4
    
  3. 上傳檔案

結論

  • 我們目標希望影片不要超過十分鐘,600秒/3秒一個檔案 = 200倍,十分鐘的影片回復成檔案,大小可能落在 2.4M * 200 = 480M

上一篇
【Day 2】 使用 EC2 搭建 RTMP 串流伺服器
系列文
無法成為片師也想拍 Vlog?!個人影音小工具的誕生!3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言