srs部署/webrtc拉流

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

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

原文地址:https://www.cnblogs.com/ziyue7575/p/13927894.html