srs的安裝部署、叢集、以及降低延遲的一些方法
srs SRS簡單安裝 環境 centos7.4
首先:安裝工具 git make yum install -y git make 安裝之後 ,下載官網映象,git clone https://github.com/ossrs/srs #cd srs/trunk 到此目錄 #./configure && make 編譯安裝 #./objs/srs -c conf/srs.conf 啟動srs程序 #pkill srs 關閉程序
降低延遲的一些簡單方法
將以下內容儲存為檔案,譬如conf/realtime.conf,伺服器啟動時指定該配置檔案(srs的conf資料夾有該檔案)。 #conf/realtime.conf listen 1935; max_connections 1000; vhost defaultVhost { gop_cache off; queue_length 10; min_latency on; mr { enabled off; } mw_latency 100; tcp_nodelay on; } 第四步,啟動SRS。詳細參考LowLatency ./objs/srs -c conf/realtime.conf第五步,啟動推流編碼器。詳細參考LowLatency 使用FFMPEG命令推流: for((;?); do ./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.1.170/live/livestream; sleep 1; done或使用FMLE推流: FMS URL: rtmp://192.168.1.170/live Stream: livestream
叢集的兩種方式 一:多機器叢集分佈 源:192.168.0.221 , 192.168.0.222
邊緣:192.168.0.223 ,192.168.0.224
源 配置檔案conf/srs.conf中: vhost defaultVhost { gop_cache off; //off低延時,on立即播放延時高 queue_length 10; //佇列長度 }
邊緣 配置檔案conf/srs.conf中vhost設定如下: vhost defaultVhost
操作1:在1.41上pkill srs 操作後環境1: 卡屏幾秒鐘後22、23、24均獲取到視訊流 結論1:srs實現高可用,即斷掉1.41源伺服器後視訊流會自動轉到1.42源伺服器; 結論2:減小網速影響、伺服器效能配置影響後,高可用延遲在可接受範圍內
操作2:在1.41上pkill srs並且在1.43 iptables上禁止1.44傳資料 操作後環境2: 卡屏幾秒鐘後21、23、24均獲取到視訊流 結論2:邊緣之間不傳送視訊流,邊緣從源獲取視訊流
操作 3:在1.41、1.42上pkill srs 操作後環境3: 4臺均無視訊 結論3: 1.44儘管自己獲取視訊流,但是離了源也無法播放,所以邊緣依賴源而存在
操作4:在1.41上pkill srs並且在1.44 iptables上禁止1.42傳資料 操作後環境4: 1.42、1.43、1.44均無法獲取到視訊流 結論 4: 源和邊緣之間通過tcp連結,所以斷一方相當於雙向斷開,1.42未獲取到視訊流也就無法傳送給1.43了,餘下所證同結論3 總結:remote模式下,邊緣完全依賴於源,邊緣無法獨立,只有當源正常且可以和邊緣互通情況下可正常使用。 操作5:推流到1.44後檢視1.44的連線為推流端ip———>1.44——>1.42 1.41的連線為:1.44——>1.42 1.43無連線 當客戶端播放1.43視訊流後1.43的連線為:1.42——>1.43
邊緣伺服器不會主動連線視訊流,當客戶端播放某個邊緣伺服器上的視訊流是它才會主動到源伺服器尋找視訊流來播放
二:單機器,多程序叢集 將以下內容儲存為檔案,譬如conf/origin.cluster.serverA.conf,伺服器啟動時指定該配置檔案(srs的conf資料夾有該檔案)
conf/origin.cluster.serverA.conf
listen 19350; max_connections 1000; daemon off; srs_log_tank console; pid ./objs/origin.cluster.serverA.pid; http_api { enabled on; listen 9090; } vhost defaultVhost { cluster { mode local; origin_cluster on; coworkers 127.0.0.1:9091; } } 將以下內容儲存為檔案,譬如conf/origin.cluster.serverB.conf,伺服器啟動時指定該配置檔案(srs的conf資料夾有該檔案)。
conf/origin.cluster.serverB.conf
listen 19351; max_connections 1000; daemon off; srs_log_tank console; pid ./objs/origin.cluster.serverB.pid; http_api { enabled on; listen 9091; } vhost defaultVhost { cluster { mode local; origin_cluster on; coworkers 127.0.0.1:9090; } }
將以下內容儲存為檔案,譬如conf/origin.cluster.edge.conf,伺服器啟動時指定該配置檔案(srs的conf資料夾有該檔案)。
conf/origin.cluster.edge.conf
listen 1935; max_connections 1000; pid objs/edge.pid; daemon off; srs_log_tank console; vhost defaultVhost { cluster { mode remote; origin 127.0.0.1:19351 127.0.0.1:19350; } }
啟動srs : ./objs/srs -c conf/origin.cluster.serverA.conf & ./objs/srs -c conf/origin.cluster.serverB.conf & ./objs/srs -c conf/origin.cluster.edge.conf &
for((;;)); do ./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv -vcodec copy -acodec copy
-f flv -y rtmp://192.1680.222:19350/live/livestream; sleep 1; done