# 戶外直播軟體架構 (obs, rtmp)
這篇主要是介紹戶外直播/戶外實況/IRL在程式方面的架構
不包含硬體架構和其使用心得
## 直播架構
* [方法一] **手機直播App**
* 直推直播平台
* 這個很簡單,這邊就不寫了
* 轉推自架[Nginx RTMP server](https://github.com/arut/nginx-rtmp-module/),然後用OBS播放器拉流轉推直播平台
* 播放器
* OBS內鍵的影片播放器
* 可以拉流RTMP,但是網路卡鈍時處理的效果不好
* 外部播放器
* 影音播放程式
* [VLC media player](https://www.videolan.org/vlc/index.zh-TW.html)
* 網頁HTML5直播播放器
* [方法二] **使用實況背包(IRL Backpacks)**
* 主要是多家行動網路聚合,雲端伺服器,運動相機那些設備的整合方案
* 因為國外有很多廠商在做,去問實際有在用這些設備的實況主或媒體(有些記者也開始會用這些設備轉播)會比較準
* 還有這已經算商用等級的設備,所以價格不便宜
* 使用實況背包還是可以選擇直推直播平台或是推到自架的RTMP然後轉OBS,所以這篇講的程式面架構還是可以套用在實況背包上
:::info
自架RTMP server當中介的好處:
* 在家開**OBS Studio**可以自訂更多畫面選項
* 戶外網路訊號不好時直播不會中斷
* 不中斷的好處:
* 直播記錄檔不會被直播平台分段
* 直播途中比較不會因為中斷而流失觀眾
:::
## Nginx RTMP server
### nginx.conf 設定範例
```apache=
worker_processes 1;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live1 {
live on;
record off;
}
}
}
```
輸出端OBS或手機直播app要推流到的網址:
`rtmp://127.0.0.1:1935/live1/`
串流碼: `1080`
接收端OBS或VLC播放器拉流的網址:
`rtmp://127.0.0.1:1935/live1/1080`
* 比較詳細的nginx.conf設定可以看這篇: https://hackmd.io/@Eotones/Hk42GMAJV
## 進階管理程式 (實況主家裡電腦端)
* [nginx-obs-automatic-low-bitrate-switching](https://github.com/715209/nginx-obs-automatic-low-bitrate-switching)
* 持續偵測NGINX-RTMP流量高低來自動切換OBS場景
* 可偵測戶外訊號中斷時切換場景
* 這個場景畫面可以做一張圖提醒觀眾直播只是訊號不好或暫時中斷,畫面會馬上回來
* 這個畫面圖也再搭配目前實況主題的宣傳圖
* 也可以小畫面播放精彩回放剪輯(OBS場景要自己做)
* 後續新出的版本有支援twitch聊天室bot和指令
* 指令可以顯示流量,切換場景或開關OBS直播
:::info
這個需要一點安裝**node.js環境**和**npm**使用的知識
不會裝的話就google或問人比較快
:::
## 手機輔助軟體/網頁 (實況主戶外手機端)
* 遠端管理
* [App] [TeamViewer](https://www.teamviewer.com/tw/)
* [網頁] [OBS Tablet Remote](http://t2t2.github.io/obs-tablet-remote/)
* OBS必須安裝 [obs-websocket](https://obsproject.com/forum/resources/obs-websocket-remote-control-of-obs-studio-made-easy.466/)
* [Twitch聊天室指令] [twitch-obs-scene-changer](https://github.com/Pedrolian/twitch-obs-scene-changer)
* 用聊天室指令控制OBS場景(要有台主或mod權限)
* 聊天室
* 直播平台官方app
* 通常沒特殊需求的話直接用官方版本就可以了
* 純觀看
* 這個幾乎等同於放OBS畫面聊天室的版本(像是Streamlabs的聊天室網頁),所以也可以直接用手機網頁瀏覽器開這些版本來用(如果有額外自訂CSS效果會更好)
* 聊天室語音
* (人少的台才適合用,人多會很吵)
* [網頁] [SpeechChat](https://www.speechchat.com/)
* [網頁] [twitch實況Google小姐教學文](http://ttsproxy.appspot.com/)
* Donate抖內贊助語音(直接播放或使用藍牙喇叭,怕吵到人可以改用耳機)
* 火狐手機版能設定背景執行,把OBS用的抖內音效網頁拿來用就可以了
* 地圖GPS
* **(為了個人隱私和安全基本上還是不建議用,真的要用的話請不要在住家附近開啟)**
* [App] [Real-Time GPS Tracker 2](https://play.google.com/store/apps/details?id=com.greenalp.realtimetracker2&hl=zh-TW)
* 可以產生分享位置的網頁
* [App] Google Maps官方版app的分享位置
* 缺點是更新頻率很慢
* [Garmin live track](https://www.markchoo.com.tw/doc/190)
* 要配合Garmin家的裝置才能用
* 偵測心跳
* [How To Add Real Heart Rate To Stream](https://medium.com/@plsoid/how-to-add-real-heart-rate-to-stream-5b993b3fa7e6)
* (通常是運動或是玩恐怖遊戲的實況在用)
## OBS面版 (實況主家裡電腦端)
* 聊天室
* Twitch + Youtube
* [網頁] [Streamlabs](https://streamlabs.com/)
* [網頁] [SKChat](https://live.sk-knower.com/skchat)
* GPS (參考上方Real-Time GPS Tracker 2)
* 地圖
* 時速
* 心跳 (參考上方偵測心跳)
## 給觀眾用的網頁
* GPS地圖
* 參考上方Real-Time GPS Tracker 2
## 手機直播軟體
:::warning
手機直播app使用上可能有各種問題
要自己去實測過才會知道效果
這邊列出的是大概知道的幾個,不是全部
不保證哪個好用
:::
* [Streamlabs - Stream Live to Twitch and Youtube](https://play.google.com/store/apps/details?id=com.streamlabs) (手機畫面 or 手機鏡頭)
* [Ace Live Streaming & PC Mirroring](https://play.google.com/store/apps/details?id=com.dev47apps.screenstream) (手機畫面 or 手機鏡頭)
* [Mobizen Live Stream to YouTube](https://play.google.com/store/apps/details?id=com.rsupport.mobizen.live) (手機畫面 or 手機鏡頭)
* [Screen Stream Mirroring Free](https://play.google.com/store/apps/details?id=com.mobzapp.screenstream.trial) (手機畫面)
* [Screen Stream Mirroring Pro](https://play.google.com/store/apps/details?id=com.mobzapp.screenstream) (手機畫面)
## 資料來源/參考資料
* Google, GitHub, StackOverflow, OBS官方論壇
* reddit r/Twitch版, r/obs版
### 設備相關
* [戶外直播設備心得與IRL實況背包設置計畫 - 一人遊戲直播局](https://hitorigs.live/irl-gear-setting/)
* [LiveU Solo](https://gosolo.tv/)
* 很多國外IRL實況主在用的設備(有些是包含在實況背包的配備中)
* [IRL Backpacks — UnlimitedIRL](https://www.unlimitedirl.com/backpacks/)
* 基於LiveU Solo的整合實況背包方案(主要是網路聚合,雲端伺服器,運動相機那些設備的整合)
* 整合多種功能的實況背包方案有很多家廠商在做,這是其中一家,其他的可以另外去google找
* [Gunrun Backpack](https://www.gunrun.tv/backpack)
* 同上
### HTML5網頁播放器
:::info
傳統串流播放器通常是設計用來看影片的
所以設計上會有卡在哪裡就從哪裡開始繼續播放的特性
因此在有卡鈍狀況下會有越播延遲越久的問題
所以推測選專門用來做直播的網頁HTML5播放器效果可能會比較好
:::
* [Video.js](https://github.com/videojs/video.js)
* [Stream from OBS to Video.js via nginx rtmp does not show stream - Works in VLC](https://github.com/videojs/video.js/issues/4303)
* [flv.js](https://github.com/Bilibili/flv.js)
* [NodePlayer.js](https://github.com/illuspas/NodePlayer.js)
* [Node-Media-Server](https://github.com/illuspas/Node-Media-Server)
:::info
HTML5播放器不支援播放rtmp,可以用nginx轉成hls輸出就能播放
參考: [Setting up HLS live streaming server using NGINX - Peer5 P2P Docs](https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/)
或是使用flash播放器有支援rtmp
:::
## 其他相關連結
* [BABANANA Chat 金剛直播聊天室截取工具](https://hackmd.io/s/B183d6iwG)
* [Youtube直播聊天室CSS修正(手機版火狐瀏覽器)](https://hackmd.io/s/HJJd-H3GX)
* [nonolive直播聊天室CSS修正(OBS版)](https://hackmd.io/s/HyvZljyc7)
{%hackmd /@Eotones/SkY_4JVTS %}
###### tags: `OBS`, `rtmp`, `nginx`