视频综合管理平台EasyNVS显示的rtsp和rtmp穿透地址错误如何解决?
时间:2022-07-23
本文章向大家介绍视频综合管理平台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)
}
修改后的界面如下,错误已经解决了。
- Python爬虫实践——简单爬取我的博客
- Python爬虫入门(二)
- 在ASP.NET MVC5应用程序中快速接入QQ和新浪微博OAuth起步创建应用程序使用NUGET更新OWIN中间件启动SSL支持申请腾讯QQ的Oauth申请新浪微博的Oauth快速接入资源地址&源码
- 有趣的算法(六) ——Find-Union算法
- 有趣的算法(七) ——快速排序改进算法
- 编写你人生中第一个机器学习代码吧!
- 使用Octave来学习Machine Learning(二)
- RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使
- MYSQL数据库设计的一些小技巧[转载]
- 在ASP.NET 5应用程序中的跨域请求功能详解什么是“同域”添加CORS包在应用程序中配置CORSCORS策略选项跨域请求中的凭据设置先行请求的过期时间CORS是怎么样工作的先行请求
- 有趣的算法(八) ——红黑树插入算法
- 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho
- 有趣的算法(九) ——蛇形数组
- 有趣的算法(十一) ——分治法:快速求最值
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法