Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

监控摄像头注册成功后,中间网络不稳定导致设备离线后无法重新上线 #60

Open
zbkh2022 opened this issue Aug 10, 2022 · 0 comments

Comments

@zbkh2022
Copy link

注意:提问前,请先看FAQ(Please read FAQ before file an issue) ossrs/srs#2716

描述(Description)

描述你遇到了什么问题(Please description your issue here)

监控摄像头成功注册后,如果中间网络断开,设备会在系统中下线,当网络恢复后,设备无法在系统中重新上线;
但检查监控摄像头注册状态是在线的,需要把摄像头先关闭注册,然后再重新打开,摄像头才能重新在系统中上线。

另外发现当监控摄像头较多时,在部分摄像头中观察状态显示在线,但是在系统中“视频流”就是没有,但是我们在网络中进行抓包,分析得出系统与摄像头交互又是正常的,这个问题出现这样的网络结构:系统在内网、摄像头在外网,中间通过路由器将5061、9000映射到外网。

  1. SRS版本(Version): 5.0.26

  2. SRS的日志如下(Log):

xxxxxxxxxxxx
  1. SRS的配置如下(Config):

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;
}

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://127.0.0.1:1935/live/[stream];

# 接收设备端rtp流的多路复用端口
listen              9000;
# 多路复用端口类型,on为tcp,off为udp
# 默认:on
tcp_enable            on;

# 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       x.x.x.x;

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

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

    # 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 ossrs/srs#307 (comment)
candidate x.x.x.x;
}

vhost defaultVhost {
rtc {
enabled on;
bframe discard;
rtmp_to_rtc on;
}

http_remux {
    enabled     on;
    mount       [vhost]/[app]/[stream].flv;
}

}

重现(Replay)

重现Bug的步骤(How to replay bug?)

1、在系统中上线监控摄像头,将中间的网络断开一下,一般我断开10-30秒,重新恢复网络,摄像头就会在系统中下线,没法恢复上线状态

期望行为(Expect)

描述你期望发生的事情(Please describe your expectation)
期望研发人员能解决该问题或者告知问题出现的原因

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant