本文是 實作在家裡自架 IRL 戶外直播伺服器 的新版本,原「自架 IRL 戶外直播伺服器」是以 RTMP server 為基底的通訊協議。而本文則是以新的 SRT (Secure Reliable Transport,安全可靠傳輸協議) 架設的直播伺服器實作文章的教學,SRT 協議相較 RTMP 協議來說有著較低延遲、使用流量需求較小等優點,在戶外直播網路不佳的地方只有數百 K 流量也尚可維持觀看,在網路狀況不可預測的戶外直播型態來說是維持直播穩定的重要特性。
在以前的自架 IRL 戶外直播伺服器的文章中,最多人卡關的應該是 RTMP 伺服器的 port 開啟以及拉流,而最近我試用了雲端伺服器,在影像串流的卡頓情況比原本在本機上架設伺服器要減少許多,可能是因為連結到自家 IP 的節點上有時候會有機率卡頓。因此本文要教大家如何架設雲端版本的 SRT 伺服器,並以自己家的實況電腦 OBS 進行拉流以進行戶外直播。
這篇文章你可以學到:
- 如何佈署雲端 SRT 接收伺服器
- 新版自動偵測流量 NOALBS 系統的安裝與設定
- 目前支援 SRT、畫質最佳的手機戶外直播 APP 的使用方式
目錄
為何要架設戶外直播伺服器
這邊借用之前文章的「自架 IRL 伺服器可以實現的功能」內容所提到的,直接把架設戶外直播伺服器的優點再跟大家說明一次:
自架 IRL 伺服器可以利用家中穩定的網路將直播內容串流到直播平台,不會因為戶外移動網路的影響導致直播串流斷線,把一天的直播分成好幾段影片,也比較不會因為斷線讓觀眾轉台,可以有效地留住觀眾。而透過自架 IRL 伺服器我們可以做到:
- 不使用手機APP即可在戶外直播畫面上呈現聊天室、直播通知、斗內特效等畫面。
- 不會因為臨時訊號不佳斷線導致整個直播離線,讓一場直播跟 VOD 被切成很多段。
- 可以偵測流量,自動在流量低時切換至 Be Right Back 場景,請觀眾稍候不要轉台。
- 透過聊天室指令管理直播串流
大幅簡化以及自動化戶外直播中因為各種斷線問題衍生的斷線重連、場景切換問題,讓戶外直播方便一些。
直接串流到平台不行嗎
當然可以,這也是最多人剛開始進行戶外直播時採用的方式,但因為戶外的行動通訊網路狀況並不是永遠穩定,所以面對各種網路訊號不佳、斷線的情形就會很頭痛,如果一場直播裡面不斷遇到網路斷線,是會非常考驗觀眾的耐心與實況主的表演狀況的。
這時候有類似「防斷線保護」的 IRL 伺服器架構就可以緩解這樣的狀況,因為我們實際用來跟平台進行串流的其實是使用室內固網的直播電腦,而且伺服器還會自動偵測戶外影像的流量位元率,在流量低的時候先切換到 BRB 讓觀眾不會因為卡頓或是斷線而離開你的直播。所以我會推薦想要長期進行戶外實況/直播的朋友可以採用這種 IRL 伺服器的方式來進行直播。
手機戶外直播與伺服器的運作方式
這整套 SRT戶外直播伺服器 的架構與組成方式如下:
手機直播APP → 雲端 SRT 伺服器 → 家中OBS影像拉流 + 實況通知特效 + NOALBS 自動場景切換 → 串流到 Twitch/YouTube/Facebook 等平台
在這個架構下,手機只要負責攝影機的影像與編碼給雲端伺服器就好。而實況畫面中的聊天室、斗內條、通知特效等等的設定跟室內實況一樣交給 OBS 處理就可以了,如果你是原本就用 OBS 開台的實況主,這些設定應該難不倒你。而且也不需要再因為要在小小的手機畫面上設定一些複雜的元件或是通知特效,還要擔心他跑不出來而煩惱半天了。
哎喲好麻煩,一定要搞那麼複雜嗎?
這是戶外實況主的血淚談,每個人使用的軟、硬體設備都不同,直播的地方與電信商也不同、面臨到的技術痛點也不同,唯一一個共通的點是:在戶外直播一定會遇到各種各樣的軟硬體或是技術問題。
有人可以接受只用手機不用穩定器晃來晃去直播一整天、反正斷線再重開就好。也有人重視畫面漂亮,希望給觀眾好的觀看體驗,如果沒有相對應的耐心去研究或學習讓你的直播更順暢的方式,直接使用直播APP串流到平台,不用去搞那麼多複雜的架構,其實也是一種很舒服的直播方式,那建議你可以跳過本文使用自己覺得適合使用的方式就好。
設定雲端 SRT 伺服器 (以 Vultr VPS 為例)
一定要架雲端伺服器嗎?我不想花錢怎麼辦?
不一定,你也可以使用 docker desktop 在自己的電腦上架設 SRT 伺服器,但是 SRT 需要開啟的 5000/5001/8181/8282 port 記得要在防火牆上開啟好,並且在 docker 中也要對映這些 port 到容器中。
原本我也試過在本機以 docker 安裝 SRT 伺服器,但是可能是因為電腦老舊的關係執行起來有點卡,所以後來採改用雲端 SRT 伺服器,至少連線不順的情況減少非常多,每個月的伺服器租金也算是可以負擔的範圍(10美金以內),所以我使用雲端 SRT 到現在已經超過三個月了。稍後我會跟大家分享雲端伺服器的流量使用狀況,在正常直播時數裡面是不會超過雲端的流量使用的。
使用 Vultr VPS 來架設雲端 SRT 伺服器
雲端 VPS 業者有非常多,這邊我推薦 Vultr 來架設。Vultr 使用 Google Cloud Platform 機房為基底,在伺服器的速度與穩定性來說都相當不錯,費用相當合理,我的網站主機也是採用 Vultr 的 VPS 架設,以月租費用來說每台 server 每月只需要約 6美金 (及額外5%稅金) 的支出,並且有 2000GB 的流量可以使用。
使用 Vultr 來架設 SRT 伺服器也相當簡單,只要 10 分鐘內即可完成!
利益申明:透過 此連結 註冊 Vultr 帳號並架設 VPS 伺服器,我可以透過你的點擊獲得 10 美元的回饋,如果你願意的話,就當作給是這篇教學文的一點小小支持吧!請透過本連結註冊好 Vultr 帳號,接下來我們開始佈署 SRT 雲端伺服器。
佈署 SRT 雲端伺服器-Docker版本
註冊完帳號進入後台後,點擊 Products 頁籤,這邊會顯示所有雲端主機的狀況。按下右上方的 + 號後選擇 Deploy New Server。
執行個體 (Instance) 的選項請如下設置:
- Cloud Compute / Intel High Perfomance
- Server Location 可以依喜好或是你所在的區域選擇延遲較低的地區
可以在這裡(https://cloudpingtest.com/vultr)測試哪個區域的伺服器離你的所在位置延遲較低(感謝 Ladell 提供)
- Server Image 請選擇 Marketplace Apps 頁籤的 Docker,並使用 Ubuntu 20.04 x64 版本
- Server Size 選擇 25 GB NVMe 即可,有提供每月 2TB 的流量使用
- 自動備份及其他的功能都可以不用,我們只是要做影像串流使用,用不到附加的功能
依照以上設定,伺服器的月租費用為 6 USD/月 (及5%額外稅金),並且有 2TB 的流量。
按下 Deploy Now 之後等待我們的伺服器佈署好就可以進行下一步的設定囉。
戶外直播需要多少流量?
以戶外直播設定位元率每秒 6,000kbps (Twitch平台的上傳上限)來說,每個月直播 200 小時大約會使用 600G 的流量。而我自己的經驗大約一場直播 8個多小時會用掉 32G(我的上傳位元率開超過6,000)。所以如果是在合理直播時數的範圍內,2TB 的流量應該是足夠使用的。
請注意,超額使用雲端伺服器的流量或效能可能會產生額外的費用。
設定 Docker-SRT
點進伺服器的頁面後,在這邊可以看到伺服器的詳細資料,包含 IP 及登入的帳號密碼等:
在右上角也可以對伺服器進行開關機、重啟、刪除等操作。我們也可以使用右上角的 View Console 在瀏覽器的新視窗進行登入來繼續我們的 Docker-SRT 的設定與安裝。
如果看不到 vultr login: 字樣的話可以按一下 Enter,接著輸入帳號 root
利用左側功能按鈕剪貼簿即可貼上密碼 (密碼在伺服器資訊的部分可以複製)
先更新伺服器裡本身的套件,輸入:
apt-get upgrade
再按 Y 同意更新所有套件。
更新套件完畢後,我們要利用 docker 來安裝一個 SRT server。
因為原生 SRT server 的設定都有點複雜,這邊我直接借用別人包好給 Belabox 使用的 SRT receiver 來做為我們的接收 server,輸入:
docker run -d --name belabox-receiver -p 5000:5000/udp -p 8181:8181/tcp -p 8282:8282/udp --restart=always --pull=always luminousaj/belabox-receiver:latest
來下載並啟動我們的 docker 容器。這個啟動語法已經將要對應好的 port 都寫好了。
接下來我們設定伺服器只要開機就會自動啟動 docker:
systemctl enable docker.service
使用 reboot
指令重開機,重新登入後輸入:
docker stats
看到 container 有在運作就代表已經設定成功了,之後就不太需要管這個伺服器了,也不用特地去開關。
如果你不要這個伺服器了就到設定頁面去做 Server Destroy 就好。
注意,只要伺服器佈署完成,就算沒有在運作也會計算費用。
接下來我們要進行電腦端的設定。
設定電腦 OBS 串流端
以下教學是使用 OBS Studio 及其附屬外掛 OBS websocket,如果你是使用 Streamlab OBS,因為 OBS websocket 只支援 OBS Studio,請改用 OBS Studio。
OBS websocket 安裝
接下來的設定部分要請參閱我之前寫過「在家自架 IRL 伺服器」文章的設定動態DNS、開啟端口、安裝 OBS websocket 的部分,請自行參閱並完成:
- 設定動態DNS:其實本設定用不到,但是如果你有需要透過手機使用 OBS websocket 來遠端控制 OBS 的話就需要做這步。
- 打開相對應的IP端口:這裡因為影像串流伺服器已經放在雲端上了,這裡我們只需要開啟OBS websocket 4444 這個 port 即可。
各家的路由器開啟方式都不同,所以這個部分要請你自己想辦法打開,一般是連進路由器後,去設定「port forwarding」(通訊埠轉發、通訊埠觸發)將外部的 4444 port 對映至你的內部 IP 的 4444 port。
以我使用的小米路由器為例,就需要到「端口轉發」這邊去設定:
安裝 OBS-websocket
這是一個可以讓你在遠端控制 OBS 的介面系統,請到此下載安裝檔
2022/9/4 更新:在 OBS Studio 更新為 28.0.x 之後, OBS websocket 已內建於 OBS Studio 中,不用另行安裝。
安裝完畢後你 OBS 的 工具選單會出現 WebSockets Server Settings
之後你可以利用網頁介面來遠端控制 OBS面板,不過這不是我們主要使用的目的。我們主要是要讓系統可以透過聊天室指令來手動/自動控制OBS的串流及場景。
自動偵測流量系統 NOALBS 設定
自動偵測流量並切換 OBS 場景的 NOALBS 系統在進入 2.0 版的安裝與設定的方式有所變更,所以以前的「自架 IRL 伺服器」文章裡的安裝方式已經失效了,這邊我就順便更新新版的安裝與設定方式給大家。新版的好處在於它可以同時監測不同來源的流量設置,例如你可能會有 RTMP、SRT 等多個不同串流的設定,NOALBS v2 之後可以同時存在。
安裝 Node.js
使用這個自動控制系統需要先安裝 Node.js 的執行環境
下載並解壓縮 NOALBS
https://github.com/715209/nginx-obs-automatic-low-bitrate-switching/releases
Windows 下載 x86_64-pc-windows-msvc.zip
解壓縮後會看到這三個檔案
NOALBS 設定方式
2022/12/1 更新: 如果對設定方式苦手的話,可以利用 這個服務 填寫以下要說明的設定,填寫完畢後再把檔案下載下來覆蓋 config.json 跟 .env 檔就可以了。
- 先設定 .env,使用文字編輯器打開 .env 檔案會看到兩行設定碼 第一行請輸入你要讓這個系統在聊天室發佈訊息的 Twitch ID,可以是台主本人的 ID,也可以是其他ID 例如:
TWITCH_BOT_USERNAME=你的TwitchID
第二行則是要輸入聊天室的金鑰,請到 https://twitchapps.com/tmi/ 取得後貼上 oauth:********* 這串文字到
TWITCH_BOT_OAUTH=
的後方
- 設定 config.json
一樣使用文字編輯器打開 config.json 檔案
接著我們逐段來說明設定:
首先是使用者部分,這邊只需要修改 name 的部分
// 雙斜線之後是我說明這一段要如何設定,設定完成之後「請刪除雙斜線及說明文字」以免程式出錯
"user": {
"id": null,
"name": "你的TwitchID",
"passwordHash": null
},
接下來是切換器(Switcher)
"switcher": {
"bitrateSwitcherEnabled": true, // 啟動流量偵測系統,預設為 true
"onlySwitchWhenStreaming": true, // 只在實況時切換場景,可用 true/false 來設定開關
"instantlySwitchOnRecover": true, // 即時恢復切換,保留true 即可
"autoSwitchNotification": true, // 自動切換通知,會在聊天室留下切換訊息,如果覺得太吵可用 false
"retryAttempts": 5, // 重試次數,不用修改
"triggers": { // 觸發的流量數字,偵測流量在多少以下時會切換場景,我會把 low 設定在 300-500左右
"low": 800,
"rtt": 2500,
"offline": null // offline 設定在 100
},
切換的場景設定,這邊的名稱就是你 OBS 要有的場景名,我一般是如以下設定:
"switchingScenes": {
"normal": "IRL", // OBS 也設定一個 IRL 的場景,一般實況時用到的場景
"low": "lowB", // OBS 也設定一個 lowB 的場景,訊號不好時會切換過去,但影像還是存在
"offline": "BRB" // OBS 也設定一個 BRB 的場景,就是斷線時暫時顯示的畫面,告知觀眾留下來別轉台
},
串流伺服器設定,用不到的可以刪掉,請留以下並修改這樣即可,注意雲端 server IP 要正確輸入:
"streamServers": [
{
"streamServer": {
"type": "SrtLiveServer",
"statsUrl": "http://[你的雲端serverIP]:8181/stats",
"publisher": "live/stream/belabox" //這裡不能修改
},
"name": "SRT-cloud",
"priority": 1,
"overrideScenes": null,
"dependsOn": null
},
]
這邊的設定要注意 {} 跟 [] 的對應數量,符號有多或少都會讓程式執行出錯(打開閃一下就關掉)
OBS websocket 設定,這邊不太需要修改,只要密碼跟 OBS websocket 設定一致即可
"software": {
"type": "Obs",
"host": "localhost",
"password": "password",
"port": 4444
},
後面是聊天室與權限的設定
"chat": {
"platform": "Twitch",
"username": "715209", // 這邊請改成你的 TwitchID
"admins": [
"b3ck" // 你的MOD名稱
],
"prefix": "!",
"enablePublicCommands": false,
"enableModCommands": true,
"enableAutoStopStreamOnHostOrRaid": true, // 執行raid指令後會自動停止實況,建議開啟
"commands": {
"Fix": {
"permission": null,
"alias": [
"f"
]
},
"Switch": {
"permission": "Mod",
"alias": [
"ss"
]
},
"Bitrate": {
"permission": null,
"alias": [
"b"
]
}
}
},
"optionalScenes": {
"starting": null,
"ending": null,
"privacy": "privacy",
"refresh": null
},
"optionalOptions": {
"twitchTranscodingCheck": false,
"twitchTranscodingRetries": 5,
"twitchTranscodingDelaySeconds": 15,
"offlineTimeout": null,
"recordWhileStreaming": false
},
"language": "ZHTW" //可以把訊息語系設定成繁體中文
}
設定完畢之後開啟 NOALBS.exe 應該可以看到以下畫面,代表設定成功了:
如果打開程式畫面只是閃一下就關掉,代表設定檔的內容有誤,可能是標籤符號沒有成對或是語法錯誤,修正之後再開啟試試看。
每次直播只要開啟 OBS Studio 及 nolabs.exe 後,你就可以在自己頻道的聊天室打指令來管理你的串流,以下是幾個常用指令:
!start 遠端執行 OBS 上的開始串流
!stop 遠端執行 OBS 上的停止串流
!rec on/off
遠端執行 OBS 錄影!switch (場景名稱) 切換到你設定好的場景名稱,例如: !switch IRL
或!ss IRL
!trigger (數字)
設定偵測到低於這個數字的位元率時,自動切到 LowB 場景,一般設定 300-1000- !otrigger (數字) 設定偵測到低於這個數字的位元率時,自動切換到 BRB 場景,設定在 100-300
!bitrate
或!b
回傳目前的位元率- !noalbs lang zh_TW 目前版本雖然在 config.json 設定好語系,仍然需要打指令切換成中文
OBS-SRT拉流設定
雖然現行版本 OBS 已經支援直接進行 SRT 拉流,但我自己測試發現還是使用 VLC 的順暢度會比較好,所以請你先安裝 VLC player,安裝完畢後在 OBS 的「來源」 就會多一個 VLC 視訊來源,在 「IRL場景」新增一個 VLC 視訊來源並且把它命名為 「SRT訊號」,並請照以下設定:
- 播放行為設定為「不可見時停止,可見時重新開始」
- 在播放清單右側按下 + 號,選擇「新增路徑 / URL」,並輸入以下網址
srt://[你的雲端伺服器IP]:8282/?streamid=play/stream/belabox
- 網路快取(ms) 設置為 2000
注意,在自動偵測流量過低會自動切換的 「BRB 場景」中,不可以有這一個 SRT 訊號的影像來源存在(很多人會用複製的然後忘記刪掉),這會導致雖然會切換場景但是影像不會重新讀取的 bug 發生。
手機 SRT 直播設定
關於適合 Twitch 實況主的 IRL 實況 APP,目前推薦 IRL Pro ,請參閱這篇文章的教學設定 (2022/11/20 更新)
目前我所知道支援 SRT 協議的手機直播 APP 相當少,但有一款畫質好、畫面乾淨、運作順暢且 iOS、Android雙平台都有的 APP Larix Broadcaster (iOS載點、Android載點) 相當推薦,個人實測在編碼串流的表現上優於 Streamlabs APP 及 Prism Live,以下就以 Larix Broadcaster 這個 APP 來繼續我們的教學:
打開 Larix Broadcaster APP 進入主畫面以後,按下右上角的齒輪,先來設定影像推流的部分
手機串流設定 Connections
點進 Connections 頁籤之後
- Name 請自訂一個簡單好辨識的名稱,可以只寫 SRT 即可
- URL 填寫
srt://[你的雲端SRT伺服器IP]:8282
填寫正確的 SRT 串流網址後,下方會自動跳出 SRT 協議的相關設定,我們接著進行:
- Srt sender mode 請選擇
Caller
- latency(msec) 填寫
2,000
剩下一個要改的地方就是 streamid,請填寫
live/stream/belabox
SRT 協議與 RTMP 協議不同的地方,就是 RTMP 是使用同一個串流金鑰(streamid) 來做推流與拉流。而如果你仔細看上面我們拉流跟推流的設定裡面,拉流的 streamid 是 play/stream/belabox,而推流的 streamid 是 live/stream/belabox ,兩個不一樣,但這邊我們完全不用去改streamid,只要知道 SRT 的推流跟拉流是使用不同的 ID 就好了。
手機影像設定 Video
這邊可以選擇要使用的手機鏡頭、解析度、防手震甚至是子母畫面(好像是iPhone13限定)的設定,你可以自己依照需求來摸看看,我只建議幾個要調整的地方:
- Resolution 1280×720
- Frame rate 60fps,手機會過熱的話 30fps
- Bitrate (Kbps) 3,000
- Format:手機支援 HEVC 的話請使用 HEVC,使用的頻寬更省、流量表現會更好,不支援的話只能選 H.264
其他設定
- 如果你有使用外接麥克風的話,在 Audio 頁籤可以選擇麥克風的來源。
- Display 裡的 Show battery indicator 選擇
Always
- Overlays:此 APP 也可以在畫面上加掛圖片或是嵌入網頁元件,但我們已經把這些工作交給 OBS 去做了,手機就只要當攝影機就好了。
手機畫面除了攝影機之外沒有任何元件,那我怎麼看聊天室?
通常是建議用第二支手機來看聊天室與進行一些管理的動作,直播的手機就專門用來直播就好(畢竟直播時也不建議把 APP 切來切去)。但如果你現階段真的沒有第二支手機,又很想看聊天室的話也可以在這個 APP 的 Overlays 裡新增一個聊天室的 Web widgets,並把支援內嵌的聊天室網頁元件網址貼上,如果不要顯示在直播的畫面上 View mode 設定為 Preview
就好,要讓觀眾也看到就選擇 Preview and stream
。接著再自行利用下方的選項調整所需要的畫面大小即可。
關於戶外直播/IRL生活實況的各類心得、想法、知識分享,也可以加入我的 IRL戶外實況討論社團 跟我們分享哦!
如果你覺得這篇文章對你有所幫助的話,請幫我按下方的「拍手(Like)」五次,讓我可以獲得些許 LikeCoin 的收入,支持我創作更多教學內容,謝謝!
如果你覺得這篇文章對你有所幫助的話,請幫我按下方的「拍手(Like)」五次,讓我可以獲得些許 LikeCoin 的收入,支持我創作更多教學內容,謝謝!
在〈自架 IRL 戶外直播伺服器 – SRT 篇(雲端 Server 設置及手機直播 APP 教學)〉中有 2 則留言
請問srt的位址沒有任何能自訂的部分嗎?這樣如果被有心人士知道ip不就會被盜用流量?
所以實況伺服器的 IP 本來就應該做好保密喔