zoukankan      html  css  js  c++  java
  • 视频综合管理平台EasyNVS显示的rtsp和rtmp穿透地址错误如何解决?

    上一篇我们讲到由于有用户有rtsp和rtmp的地址做内部穿透的需求,所以我们在EasyNVS上增加了这个功能(EasyNVS通道列表如何获得RTMP地址和RTSP地址)。当目前的系统无法满足部分用户的需求时,我们会针对需求进行调整,达到效果。

    EasyNVS通道列表rtsp和rtmp穿透地址错误

    在测试的时候,我们偶尔会发现EasyNVR接到EasyNVS平台,EasyNVS平台通道列表出现的rtsp和rtmp穿透地址是错误的。对于这一点我们也进行了原因分析。

    原因分析

    因为在设备下线的时候,需要删除穿透的信息。但是在去数据库中查询设备穿透的时候,出现了空的现象,此时代码中没有进行非空校验,导致出现错误的穿透结果。

    错误复现:

    根据此代码可以复现该错误:

    //删除设备穿透表
    var sysTunnel models.SysTunnel
    db.SQLite.First(&sysTunnel)
    if sysTunnel.PortFreeList != "" {
       sysTunnel.PortFreeList += ","
    }
    var deviceTunnel models.DeviceTunnel
    db.SQLite.Where("device_id = ?", conf.DeviceID).First(&deviceTunnel)
    
    sysTunnel.PortFreeList += strconv.Itoa(deviceTunnel.RemoteRtspPort) + "," + strconv.Itoa(deviceTunnel.RemoteRtmpPort)
    db.SQLite.Save(&sysTunnel)
    db.SQLite.Delete(&deviceTunnel)
    

    问题解决:

    我们将代码进行了简单修改:

    //删除设备穿透表
    var sysTunnel models.SysTunnel
    db.SQLite.First(&sysTunnel)
    if sysTunnel.PortFreeList != "" {
       sysTunnel.PortFreeList += ","
    }
    var deviceTunnel models.DeviceTunnel
    db.SQLite.Where("device_id = ?", conf.DeviceID).First(&deviceTunnel)
    if deviceTunnel.ID != 0 {
       sysTunnel.PortFreeList += strconv.Itoa(deviceTunnel.RemoteRtspPort) + "," + strconv.Itoa(deviceTunnel.RemoteRtmpPort)
       db.SQLite.Save(&sysTunnel)
       db.SQLite.Delete(&deviceTunnel)
    }
    

    修改后的界面如下,错误已经解决了。

  • 相关阅读:
    如何批量查看容器内部的进程?
    如何一键将k8s中configmap以及secret的配置变成本地环境变量
    如何快速批量下载m3u8(ts)视频?
    如何快速搜索?
    【待学习】知识点/小类
    【待学习】科目/大类
    总览:SpringCloud基础结构
    AES 加密解密
    JVM学习:方法重载的优先级
    反射操作数组---反序列化小知识
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13444367.html
Copyright © 2011-2022 走看看