当前位置:首页 > 技术文章 > 正文内容

利用srs实现安防摄像头云监控(sre监控)

arlanguage3个月前 (01-31)技术文章33

因为流媒体服务器srs支持gb28181协议,所以可以利用它实现安防网络摄像头的云监控功能。如果有不懂流媒体服务的朋友可以自行百度,诸如基于golang的livego,java实现的red5都是流媒体服务器,都提供rtmp、hls、http-flv等协议的点播和直播功能。

1、安装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
  • git checkout develop
  • ./configure --with-gb28181
  • make clean && make
  • 启动:./objs/srs -c conf/push.gb28181.conf

2、gb28181.conf配置示例

# push gb28181 stream to SRS.

listen                  1935;
max_connections         1000;
daemon                  off;
srs_log_tank            console;

http_api {
    enabled         on;
    listen          1985;
}

http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}

stats {
    network         0;
}

stream_caster {
    enabled             on;
    caster              gb28181;

    # 转发流到rtmp服务器地址与端口
    # TODO: https://github.com/ossrs/srs/pull/1679/files#r400875104
    # [stream] is VideoChannelCodecID(视频通道编码ID) for sip
    # 自动创建的道通[stream] 是‘chid[ssrc]’ [ssrc]是rtp的ssrc
    # [ssrc] rtp中的ssrc
    output              rtmp://你的ip:1935/live/[stream];
    
    # 接收设备端rtp流的多路复用端口
    listen              9000;

    # rtp接收监听端口范围,最小值
    rtp_port_min        58200;
    # rtp接收监听端口范围,最大值
    rtp_port_max        58300;

    # 是否等待关键帧之后,再转发,
    # off:不需等待,直接转发
    # on:等第一个关键帧后,再转发
    wait_keyframe       off;
    
    # rtp包空闲等待时间,如果指定时间没有收到任何包
    # rtp监听连接自动停止,发送BYE命令
    rtp_idle_timeout    30;

    # 是否转发音频流
    # 目前只支持aac格式,所以需要设备支持aac格式
    # on:转发音频
    # off:不转发音频,只有视频
    # *注意*!!!:flv 只支持11025  22050  44100 三种
    # 如果设备端没有三种中任何一个,转发时为自动选择一种格式
    # 同时也会将adts的头封装在flv aac raw数据中
    # 这样的话播放器为自动通过adts头自动选择采样频率
    # 像ffplay, vlc都可以,但是flash是没有声音,
    # 因为flash,只支持11025 22050 44100
    audio_enable        off;

    # 服务器主机号,可以域名或ip地址
    # 也就是设备端将媒体发送的地址,如果是服务器是内外网
    # 需要写外网地址,
    # 调用api创建stream session时返回ip地址也是host
    # $CANDIDATE 是系统环境变量,从环境变量获取地址,如果没有配置,用*
    # *代表指定stats network 的网卡号地址,如果没有配置network,默认则是第0号网卡地址
    # TODO: https://github.com/ossrs/srs/pull/1679/files#r400917594
   # host       $CANDIDATE;
    host         你的ip;

    #根据收到ps rtp包自带创建rtmp媒体通道,不需要api接口创建
    #rtmp地址参数[stream] 就是通道id  格式chid[ssrc]
    auto_create_channel   on;

    sip {
        # 是否启用srs内部sip信令
        # 为on信令走srs, off 只转发ps流
        enabled on;
        
        # sip监听udp端口
        listen              5060;
        
        # SIP server ID(SIP服务器ID).
        # 设备端配置编号需要与该值一致,否则无法注册
        serial              34020000002000000001;

        # SIP server domain(SIP服务器域)
        realm               3402000000;

        # 服务端发送ack后,接收回应的超时时间,单位为秒
        # 如果指定时间没有回应,认为失败
        ack_timeout         30;

        # 设备心跳维持时间,如果指定时间内(秒)没有接收一个心跳
        # 认为设备离线
        keepalive_timeout   120;

        # 注册之后是否自动给设备端发送invite
        # on: 是  off 不是,需要通过api控制
        auto_play           on;
        # 设备将流发送的端口,是否固定
        # on 发送流到多路复用端口 如9000
        # off 自动从rtp_mix_port - rtp_max_port 之间的值中
        # 选一个可以用的端口
        invite_port_fixed     on;

        # 向设备或下级域查询设备列表的间隔,单位(秒)
        # 默认60秒
        query_catalog_interval  60;
    }
}

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       你的ip;
}

vhost __defaultVhost__ {
   # 开启 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;
         hls_m3u8_file   [app]/[stream].m3u8;
         hls_ts_file     [app]/[stream]/[04]:[05]-[seq].ts;
     }
     # 保存视频
     dvr {
        enabled      on;
        # 这个里的都保存
        #dvr_apply       all;
        #dvr_path     ./objs/nginx/html/dvr/[app]/[stream]/[timestamp].mp4;
        #dvr_plan     session;
        #time_jitter             full;
        dvr_path            ./objs/nginx/html/dvr/[app]/[stream]/[2006]/[01]/[02]/[15].[04].[05].[999].mp4;
        dvr_plan            segment;
        dvr_duration        30;
        dvr_wait_keyframe   on;
    }
    
    rtc {
        enabled     on;
        bframe      discard;
    }
}

3、配置文件中端口协议说明

  • tcp:1985
  • tcp:8080
  • udp:9000
  • udp:5060
  • udp:8000

4、配置安防网络摄像头(大华、海康威视)

  • 按照如下配置完成后,如果显示绿色对勾说明,网络摄像头已经注册成功,下面就可以进行摄像头的网络直播。

5、srs播放器

  • 浏览器中输入http://www.ossrs.net/players/srs_gb28181.html
  • 在API地址与端口输入:http://你的ip:1985,然后点击查询会话和查询通道,如下图:



  • 点击如图的rtmp播放和rtc播放即可播放,通过点击上下左右可以实现云台控制,
  • 拉流地址如下:
  1. rtmp://你的ip:1935/live/34020000001320000002@34020000001310000002
  2. http://你的ip:8080/live/34020000001320000002@34020000001310000002.flv
  3. webrtc://你的ip/live/34020000001320000002@34020000001310000002
  • 播放效果如下图:




下面介绍一下桌面直播

  • 首先需要采用推流软件进行推流,意思就是把视频流推到流媒体服务器,此处采用obs推流,也可使用ffmpeg,配置如下,服务器为rtmp服务器地址,串流秘钥为形如rtmp://ip/123中的123

拉流地址

  • rtmp://你的ip/live/1
  • http://你的ip:8080/live/1.flv

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1877.html

标签: nginx ffmpeg
分享给朋友:

“利用srs实现安防摄像头云监控(sre监控)” 的相关文章

Nginx配置中root和alias分不清?本文3分钟帮你解惑

Nginx在配置映射路径的时候,有时候看到的是root,有时候看到的是alias,这两个有什么区别?本文笔者将带大家详细了解一下。什么是NginxNGINX 是全球最受欢迎的 Web 服务器之一,用于反向代理和负载均衡,还提供 HTTP 服务器功能,主要是为实现最大性能和稳定性而设计的。Ubuntu...

Linux中内网或者没网时安装软件的两种方式

写在前面对于可以连接外网的服务器装软件,只要配置yum源就可以随便使用了但是对于内网来说,不能连接外网,一般情况下,管控平台只有上传的权限。尤其是一些涉密的岗位,比如电力,电信,军工之类的。今天和小伙伴聊聊内网服务器如何安装软件的问题。可事实是,唯恐暴露才华不足的卑怯的畏惧,和厌恶钻研刻苦的惰怠,就...

nginx启动、重启、关闭

一、启动cd usr/local/nginx/sbin./nginx二、重启更改配置重启nginxkill -HUP 主进程号或进程号文件路径或者使用cd /usr/local/nginx/sbin./nginx -s reload 判断配置文件是否正确nginx -t -c /usr/local/...

容器中Nginx高并发参数调优实战 nginx并发量过高怎么处理

在容器化的微服务架构中,Nginx作为反向代理和负载均衡器,常常需要承担高并发访问的压力。当并发连接数超过Nginx可处理的上限时,就会出现新连接被丢弃的情况。本文将详细介绍如何发现和定位这个问题,并通过调整内核参数和Nginx配置来解决。一、问题现象某Web服务在高并发场景下,偶尔会出现部分请求无...

PHP-性能优化 php性能最优化安全最大化

1 尽量静态化如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。当然了,这个测试方法需要在十万级以上次执行,效果才明显。其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法(非静态方法)在程序运行中生成内存,所以静态方法可...

学习Java需要掌握哪些技能?

想要找到Java工程师的工作,必须具备Java岗位要求的相关技能,应该有夯实的Java基础知识,熟练掌握、JavaSE开发、JavaWEB与数据库高级编程、企业级框架、大型企业级项目实战等相关的开发技能。01 Java基础知识Java入门、变量,基本表达式、流程分支、单层循环、双层循环、数组入门等。...