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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM