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控制台了