srs部署/webrtc拉流
參考:
前言
本來公司使用的是coturn創建的turn中繼服務處理的webrtc,但是這樣不能保存視頻,因此研究了一下srs,成功之后發現很好用.
剛開是rtc配置一直失敗,成功之后,發現依然是毫秒級延遲.
srsgithub地址:https://github.com/ossrs/srs/tree/4.0release
webrtcChrome調試地址:chrome://webrtc-internals
srs控制台github地址:https://github.com/ossrs/srs-docker/tree/v4
srs4.0中文官方文檔 https://github.com/ossrs/srs/tree/4.0release
部署srs服務
我使用的是git,Ubuntu18.04
安裝git(若是已經有了的不用安裝)
sudo apt-get install git
安裝srs
git clone https://gitee.com/winlinvip/srs.oschina.git srs &&
cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && git pull
# webrtc需要srs的最低版本:SRS4.0.14,所以我們部署的srs的時候版本需要大於SRS4.0.14
# 查看分支
git branch -v
# 若是不是 *4.0release ,需要切換分支
git checkout 4.0release
#再次查看當前所處分支
git branch -v
當前已經在
trunk
文件夾中了
編譯
./configure --with-hls --with-ssl --with-http-server --with-http-callback --with-http-api --with-ingest --with-stream-caster && make -j10
操作srs
啟動
# trunk中
./objs/srs -c conf/rtc.conf # 默認的rtc的配置文件
注意:若是服務器重啟,還是需要再次啟動的
查看狀態
./etc/init.d/srs status
停止
./etc/init.d/srs stop
查看srs版本
./objs -v
我的conf配置
- 使用rtmp推流(默認推流方式)
- 使用rtmp/flv/m3u8/webrtc 拉流
- 視頻自動保存
- nosave的推流視頻不會保存
# the config for srs to delivery RTMP
# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP
# @see full.conf for detail config.
listen 1935;
max_connections 1000;
srs_log_tank console;
srs_log_file ./objs/srs.log;
daemon off;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
http_api {
enabled on;
listen 1985;
}
stats {
network 0;
}
rtc_server {
enabled on;
# Listen at udp://8000
listen 8000;
#
# The $CANDIDATE means fetch from env, if not configed, use * as default.
#
# The * means retrieving server IP automatically, from all network interfaces,
# @see https://github.com/ossrs/srs/issues/307#issuecomment-599028124
candidate $CANDIDATE;
}
vhost __defaultVhost__ {
# 0延遲,默認就是0延遲
# min_latency on;
# play {
# mw_latency 0;
# mw_msgs 0;
# }
# 開啟 flv 播放
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
# 開啟 m3u8 播放
hls {
enabled on;
hls_path ./objs/nginx/html;
hls_fragment 10;
hls_window 60;
}
# 保存視頻
dvr {
enabled on;
# 這個里的都保存
dvr_apply all;
dvr_path ./objs/nginx/dvr/[app]/[stream]/[timestamp].mp4;
dvr_plan session;
time_jitter full;
}
rtc {
enabled on;
bframe discard;
}
}
vhost nosave {
# 0延遲,默認就是0延遲
# min_latency on;
# play {
# mw_latency 0;
# mw_msgs 0;
# }
# 開啟 flv 播放
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
# 開啟 m3u8 播放
hls {
enabled on;
hls_path ./objs/nginx/html;
hls_fragment 10;
hls_window 60;
}
rtc {
enabled on;
bframe discard;
}
}
推流地址
rtmp://192.168.0.54/live
rtmp://nosave/live
密鑰是自定義的字符串,假如我使用的是 test1
拉流地址
rtmp:
rtmp://192.168.0.54:1935/live/test1 # 端口號1935
flv:
http://192.168.0.54:8080/live/test1.flv # 端口號8080
m3u8:
http://192.168.0.54:8080/live/test1.m3u8 # 端口號8080
webrtc:
webrtc://192.168.0.54/live/test # 沒有端口號
webrtc使用的是udp,默認監聽8000,不需要設置端口號
測試
推流:
- 電腦端:obs
- 手機端:杏林推流
拉流:
rtmp/flv/m3u8
- 電腦端:
- http://ip:8080/players/rtc_player.html
- potplayer右鍵打開鏈接放入rtmp拉流地址即可
- 移動端
- srs官方app 可以進行拉流播放
webrtc
異常處理
測試環境webrtc可以拉流,正式環境黑屏
原因
rtc_server {
enabled on;
listen 8000;
candidate $CANDIDATE;
}
rtc的
$CANDIDATE
可以選擇共有網絡,一般默認會選中179的局域網絡,若是推流地址和拉流地址不在一個局域中,會異常
解決方法
設置為公網ip
rtc_server {
enabled on;
listen 8000;
candidate 101.xxx.xxx.xxx;# 設置為公網的地址
}
使用推流的時候推流失敗
原因:權限不足.
創建srs服務的用戶和啟動的用戶不是一個,啟動的用戶啟動srs的時候成功了,但是推流的時候需要緩存視頻,推流的時候,這個用戶沒有權限在文件夾下保存視頻.
解決方法:
方法1:重新啟動srs:使用sudo或者用部署srs的用戶啟動
# 停止
./etc/init.d/srs stop
# 啟動
./objs -c conf/自己的配置.conf
方法2(不建議):將文件保存位置為當前用戶賦予權限
sudo chmod 777 文件夾
不建議使用方法2,若是以后換文件夾,還要重新修改.
srs控制台配置
百度的時候,能夠搜到srs控制台,但是srs服務中默認是沒有的
http://ossrs.net:1985/console/ng_index.html#/configs
可以到ossrs/srs-docker 將這個項目下載下來.
將里面的srs-docker/srs-console/trunk/research/
中的console文件夾復制到srs服務的srs/trunk/objs/nginx/html/
文件夾中.
此時 http://ip:1985/console/ng_index.html#/connect 中有srs控制台了