• 猿创征文|见过的最傲娇的开源管理者,真的气人,SRS视频流方案


    公司需要做视频流的监控,在调研了几家的监控方案,最终选择了开源的方案,一方面因为省钱,一方面也确实简单。调研的过程就不多说了,直接开始吧

    1、需求

    先说下公司的基本需求

    • 在线视频的观看,路侧视频流可以直接点击观看
    • 路侧视频需要存储,回放

    这个我调研了几种视频方案,最终选择了SRS.

    2、SRS介绍

    SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。

    说简单点,SRS就是直播开源软件,你可以自己做个抖音直播,自己卖货,发大财,想想都开心。哈哈哈,扯远了。

    官方文档地址:Docker | SRS

    3、环境部署

    3.1 启动服务

    中了docker 的毒,所以我还是喜欢docker部署环境,一键配置,真的是爽,废话不多说,直接走起。

    1. docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
    2. registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf

    这个看起来没啥难度,这样就启动了一个SRS的服务,下面就可以开心的玩耍了,我们推个流试试。

    3.2 验证服务

    服务启动之后,直接搞个推流软件,现在常用的是OBS studio,这里放个动图

    1、显示点击设置,然后填入推流的数据地址:rtmp://192.168.116.128:1935/live

    2、串流秘钥是你的身份id,这里填写的是123,别人可以通过这个访问,然后点击开始推流。

    3、打开后台管理平台,http://192.168.116.128:8080/,注意这里换成你自己的ip和端口

    4、点击SRS播放器,在输入流的地址,http://192.168.116.128:8080/live/123.flv,应该看到你的直播桌面了,是不是很简单。

    3.3 配置的映射

    我们开发一般不会使用缺省配置,必须要把配置映射到本地,如果你不确定配置的具体地址,可以将容器启动之后,进入容器查看,找到配置所在地址

    因为我有保存的需求,所以我还将视频文件的保存地址做了映射,可以作为回放

    1. -v /home/chongxin/srs2/conf:/usr/local/srs/conf
    2. -v /home/chongxin/srs2/live:/usr/local/srs/objs/nginx/html/live

    /usr/local/srs/conf 是所有的配置地址

    /usr/local/srs/objs/nginx/html/live\ 是所有的录像地址

    4、方案选择

    4.1 SRS 注意点

    • Http回调,通过hook的方式回调,可以建立一个服务进行控制。
    • 人对于延迟的感知是400ms
    • SRS支持HLS/RTMP两种成熟而且广泛应用的流媒体分发方式。
    • HTTP本质上还是文件分发,网页是HLS还是HTTP
    • 稳定的较小延迟:RTMP延迟在0.8-3秒,能应用于交互式直播,视频会议,互动式直播等等。如果对延时有一定要求,就不要选择HLS,RTMP会是最佳选择。
    • rtmp 测试有2秒的延迟,有没有更低延迟呢。有,就是webRTC。正常延迟为1秒之内。
    • HLS流,作为直播正常延迟10秒起步,所以也不推荐使用。如果要配置
    • 录制,在服务器开启DVR即可
    • 服务器端定制的实现方式,就是HTTP回调。如需要api回调的方式获取dvr,在配置文件加入以下即可。

    4.2 方案

    1. DVR实现

    dvr 也就是录制视频,可以控制视频的存储时间

       2.视频录制

    视频录制在srs的方案只能通过forward的方式

    这里贴一下我的配置,因为在同一台机器上,我有两个配置。

    看一下启动的脚本master 的启动脚本

    1. CANDIDATE="192.168.116.128"
    2. docker run --restart=always -it \
    3. -p 1935:1935 -p 1985:1985 -p 8080:8080 \
    4. --name ccp-srs \
    5. -v /home/chongxin/srs/conf:/usr/local/srs/conf\
    6. -v /home/chongxin/srs/live:/usr/local/srs/objs/nginx/html/live\
    7. --env CANDIDATE=$CANDIDATE \
    8. -p 8000:8000/udp \
    9. -d registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/sc/forward.master.conf

    看下forward.master.conf配置:

    1. # the config for srs to forward
    2. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/sample-forward
    3. # @see full.conf for detail config.
    4. listen 1935;
    5. max_connections 1000;
    6. pid ./objs/srs.master.pid;
    7. daemon off;
    8. srs_log_tank console;
    9. http_server {
    10. enabled on;
    11. listen 8080;
    12. dir ./objs/nginx/html;
    13. }
    14. vhost __defaultVhost__ {
    15. tcp_nodelay on
    16. min_latency on;
    17. play {
    18. gop_cache off;
    19. queue_length 10;
    20. mw_latency 100;
    21. }
    22. publish {
    23. mr off;
    24. }
    25. forward {
    26. enabled on;
    27. destination 192.168.116.128:19350; # 这里配置slave的地址
    28. }
    29. http_remux {
    30. enabled on;
    31. mount [vhost]/[app]/[stream].flv;
    32. }
    33. }

    看下slave的启动脚本

    1. CANDIDATE="192.168.116.128"
    2. docker run --restart=always -it \
    3. -p 19350:19350 -p 2985:1985 -p 9080:8080 \
    4. --name ccp-follower \
    5. -v /home/chongxin/srs2/conf:/usr/local/srs/conf\
    6. -v /home/chongxin/srs2/live:/usr/local/srs/objs/nginx/html/live\
    7. --env CANDIDATE=$CANDIDATE \
    8. -p 9000:8000/udp \
    9. -d registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/sc/forward.slave.conf

    看下forward.slave.conf配置:

    1. # the config for srs to forward
    2. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/sample-forward
    3. # @see full.conf for detail config.
    4. listen 19350;
    5. max_connections 1000;
    6. pid ./objs/srs.slave.pid;
    7. daemon off;
    8. srs_log_tank console;
    9. http_server {
    10. enabled on;
    11. listen 8080;
    12. dir ./objs/nginx/html;
    13. }
    14. vhost __defaultVhost__ {
    15. hls {
    16. enabled on;
    17. hls_path ./objs/nginx/html;
    18. hls_fragment 10;
    19. hls_window 60;
    20. }
    21. http_remux {
    22. enabled on;
    23. mount [vhost]/[app]/[stream].flv;
    24. }
    25. }

    5、总结

    SRS的使用过程中还是有许多的问题,官方公布了微信公众号,这个是TM最难加的微信群,直到现在还没进去,真TM不尊重人,要不是公司内部有人用,还真他妈不选这个方案。已经在打算放弃了。

    在加管理者的个人微信之后,经过差不多1天的时间才通过,然后说想进群,说要看搭建的环境,我晚上下班了,就说第二天发他,第二天(10月28号)我准时发了,然后丢过来文档发给我看,我也按他的要求去看了,10月31号微信他说想加群,但是再也没有下文了,真他妈的傲娇,生涯见过的最傲娇的开源管理者,这是害怕使用者交流吗?

    今天是11月10号,已经过去10天了,还没回复我,真的气人。

    对于这种事,你怎么看? 欢迎留言!!!

  • 相关阅读:
    【数据结构】测试1 绪论
    DHCP-PXE
    高速DSP系统设计参考指南(三)串扰
    springboot+大学生就业规划系统 毕业设计-附源码191451
    Linux 下 SSH 登录如何显示横幅消息
    【全民编程】《软件编程-讲课视频》【零基础入门到实战应用】
    Java对象不再使用时,为什么要赋值为 null ?
    jsp+servlet+mysql实现的学生签到考勤请假管理系统源码+教程
    MSDC 4.3 接口规范(1)
    【问题记录】解决Qt连接MySQL报“QMYSQL driver not loaded”以及不支持MySQL事务操作的问题!
  • 原文地址:https://blog.csdn.net/perfect2011/article/details/127795388