iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0

進度說明

補充了架構圖,在前一篇文章中。 說明在建立 S3 Bucket 之後,透過 aws cli 去發行臨時的網址和憑證。 不過還有幾件事情我還需要花些時間研究和設定,先記錄起來:

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

需求說明

在這篇將透過簡單的方式,驗證幾件事情:

  1. 利用 EC2 虛擬主機,建立一個 RTMP Server
  2. 使用手機走 RTMP 協定,推播即時影像串流到自建伺服器

建立流程簡述

EC2

  1. 這邊需要先確定你有 AWS 帳號
  2. 然後網路部分也弄好了...吧

    新手暫時不用管網路,因為有預設 VPC,上面已經配好對外的 Internet Gateway,簡稱 IGW。 也有預設路由了對外了。 等一下有用到網路的知識再補充!

  3. 在 console 中搜尋 EC2 或是點下方連結
    連結: https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#Home:
  4. Launch Instance 建立主機
    • 選擇 Ubuntu
    • Instance Type 選 t3.micro / 有錢的話可以開大一點,不然先這樣吧
    • AMI 選擇最新的 LTS 版本
    • 建立 Key Pair / 下載保存 pem / private key 只能下載一次,注意不要外流或遺失
      • 換 key 不是不行,就是有點麻煩而已
    • Security 預設會開 Port 22 允許「所有來源」
    • 網路可以先選擇自動派發 Public IP / 也可以之後改用 Elastics IP 固定 Public IP
    • 儲存大小可以先給個 20 GB
  5. 連線前,要注意幾個部分
    • Security Group (簡稱 SG) 有對正在使用的來源和協定進行開放
    • 網路有對外的 Public IP 且 所在的子網路有路由、有閘道通道外面
    • 私鑰權限不能亂給,基於安全理由,不能讓所者者以外的人有權限,所有人也只能讀取權限
  6. 連入主機
    ssh -i </所在的/路徑/私鑰名稱.pem> ubuntu@主機IP
    
  7. 接著安裝 Nginx + RTMP 模組

Server & Module 編譯安裝

  1. 安裝網頁伺服器
sudo apt update
sudo apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev

  1. 查看我們要裝的 RTMP Module 專案的 GitHub,其中安裝的流程寫在 Build 一段
  2. 到 Nginx 下載頁面看看最新版本
  3. 接著完成下列指令,進行下載,解壓縮
cd ~
sudo git clone https://github.com/arut/nginx-rtmp-module.git
wget http://nginx.org/download/nginx-1.29.1.tar.gz
tar -zxvf nginx-1.29.1.tar.gz
cd nginx-1.29.1
  1. 使用 make 指令幫忙完成後續編譯的部分
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
make
sudo make install
  1. 編譯中...

Server & Module 套件管理程式安裝

  • 如果你的設備上已經裝過了 Nginx 而且還是用 apt 裝的...
which nginx
  • 輸出可以看出,在 /usr/sbin 目錄下...
/usr/sbin/nginx
  • 如果沒有要走編譯安裝,可以用下列指令取而代之
sudo apt update
sudo apt install -y libnginx-mod-rtmp

修改 nginx.conf

  1. 編輯 nginx.conf
sudo vim /etc/nginx/nginx.conf
  1. 加入下方設定
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }

        # 開啟 HLS 輸出
        hls on;
        hls_path /tmp/hls;
        hls_fragment 3s;
        hls_playlist_length 30s;

    }
}
  1. 完成後 檢查設定檔 文法是否正確
❯ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 重啟 nginx
sudo systemctl restart nginx
  1. 這樣就可以用 rtmp://<伺服器IP或是域名>/live/streamkey 推播串流喔

等一下!!

  • 上面一段加入的 conf 上 listen 1935 會在伺服器上,開 1935 port 作為入口
  • 不過,也要記得在 SG 上面也開起來喔!!

用 Client 驗證

  1. 安裝 PRISM LIVE <-- 免費
  2. 另一種選項:因為剛好有買 DJI Action 4,他的對應手機 App 可以推 RTMP

    這個蠻方便的,先這樣做!!

  3. 驗證在 /tmp/hls 裡面有資料!!

結論

  • 向自建直播平台邁出一大步,不過這裡有些明顯的優缺點,讓我先賣官子吧!!
  • 這邊有要注意幾件事情:
    • 存放在哪裡? SSD? DRAM?
    • 會不會自動清除資料?
    • 流量傳入不會有費用,不過要看直播,就會有流量流出,會有費用的!
  • 我們還缺一個「觀看直播的介面喔」,之後來做!

上一篇
【Day 1】 開賽 / 需求說明 / 建立 AWS S3 Bucket 接收資料
下一篇
【Day 3】 RTMP 與 HLS 的淵源
系列文
無法成為片師也想拍 Vlog?!個人影音小工具的誕生!3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言