zoukankan      html  css  js  c++  java
  • 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控制台了

  • 相关阅读:
    python 判断矩阵中每行非零个数的方法
    用Python 绘制分布(折线)图
    统计numpy数组中每个值出现的个数
    pandas 获取不符合条件的dataframe
    Python 中如何判断 list 中是否包含某个元素
    docker与Spring boot的集成:docker-maven-plugin使用
    处理kdevtmpfsi挖矿病毒
    使用docker-maven-plugin推送镜像到远程docker服务器
    docker 开启2375端口,提供外部访问docker
    Spring Boot 配置优先级顺序
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/13927894.html
Copyright © 2011-2022 走看看