我们定义gb协议中得网守为sip信令服务器,协议转换服务为网关。考虑有时需要内部网守信令服务,因此架构中,网关和网守可以分离, 内部网守和外网上云网关连接为tcp 连接,整体架构则如下所示:
1 、使用ssdp 协议和 其他组播协议来进行搜索摄像头, 2、 使用onvif协议来补充推算所有设备, 3、 使用snmp协议来搜索其他相关设备,尽可能推知所有设备,并且列出到智能逻辑列表中
2、可视化界面配置服务 从界面中可以看到,我们的服务分化架构: 1 搜索服务 包含被搜索 2 信令网关 3 存储服务 4 媒体服务器引擎 5 展示播放 6 事件,事件本身和脚本又融合在一起,可以看一下的lua脚本示例,在某一种网络链接,断开的时候,逻辑 可以放置到脚本中,本身事件处理又融合到一个单独的服务中,这样代码比较集中。模式就是所有事件排队到队列中 然后,交给脚本处理。
网守服务从服务器中分离出来?,实际上在制作得过程中,网守网关本身就是一个进程,甚至客户端可以放进进程中,这种启动方式作为配置项来启动,可以单独启动网守,或者单独启动网关,或者同时启动网关网守,有两种方式作为启动模式: 1 是在配置界面中设置启动方式,明确定义启动模式,这就要求有一个配置界面,可以在配置界面中选取启动方式 2 启动方式为谁先启动谁就作为网守服务,另外启动ssdp协议作为发现服务,这一点非常重要,所有网守和网关都可以。
1.1 网关服务器网关服务器负责进行网络协议转换。在一个网中,网关可以有多个,网守可以将不同得摄像头推流分配到不同得网关,在内网得服务中可以使用mdns协议,mdns 使用组播地址为: 224.0.0.251 ,端口为5353,使用mdns协议得好处是可以同时发现投屏得airplay设备。
1.2 网守服务网守服务作为独立进程进行服务时,还有一个功能就是连接外部网关服务器,网守在内网里启动得时候,可以直接连接到外网得网络服务。 这里有一个问题,如何同时可以让内网得网关和外网得网关同时得到数据?
1.3 推理服务推理服务就是在服务器中的一个角色,使用的方式为: 1 opencv opencv加载深度模型,模型放置到目录中,自动搜索目录下的所有模型,具体哪一路流对应哪些模型,有lua脚本来配置,而脚本的生成又有界面来生成。 2 yolo 3 onnx 4 python脚本 直接放置python脚本到目录下面,自动搜索目录下的所有python脚本,具体哪一路对应哪个python脚本,有lua脚本来配置。
1.4 存储服务存储服务分为两种: 1 服务器智能逻辑面板指定流进行存储 2 事件发生前后自动进行事件的流存储,如存储该事件前后10分钟的视频。
1.5 事件使用脚本化来制作各类事件发生和处理,本身事件的处理过程和逻辑放置到脚本中,脚本主要使用集中方式: 1 python 脚本 2 lua 脚本 3 c++ 脚本 4 js 脚本
function main (clientId, message)
-- echo back the message
_send(clientId, message)
end
-- notify about connects
function on_connect(clientId)
_sendAll("ClientID " .. clientId .. " just joined the server")
end
-- ... and disconnects
function on_disconnect(clientId)
_sendAll("ClientID " .. clientId .. " just quit the server")
end
sdp 协议描述
ts流 m=video 8002 RTP/AVP 96 a=rtpmap:96 MP2T/90000
v=0 o=- 20140233 20140238 IN IP4 192.168.2.105 //#1 s=rtp PS stream i=N/A c=IN IP4 192.168.2.105 //#2 t=0 0 a=tool:ACME RTSP server a=recvonly a=type:broadcast a=charset:UTF-8 a=framerate:16 m=video 9004 RTP/AVP 96 //#3 ,端口要是偶数 b=RR:0 a=rtpmap:96 MP2P/90000
未完待续。。。。