LiveNVR搭建无插件直播方案时,采用行业标准的通用协议RTSP/Onvif接入摄像机IPC摄像机 / NVR硬盘录像机设备;Onvif是摄像机的发现与控制管理协议,Onvif用到的流媒体协议也是RTSP,在摄像机NVR流媒体接入上,就是直接采用统一的RTSP协议接入;
在RTSP协议上,由于各个厂家都有不同的处理方法,比如:海康、大华、雄迈、宇视、天地伟业等厂家的RTSP地址规则有所区别。
大华产品 rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
示例: rtsp://admin:admin@127.0.0.1:554/camera/monitor?channel=1&subtype=1
海康-预览取流-旧版规则(2012年之前的设备只持旧版规则) rtsp://<username>:<password>@<ipaddress>:<port>/<videotype>/ch<id>/<streamtype>/av_stream
示例: rtsp://admin:admin@127.0.0.1:554/h264/ch1/main/av_stream
示例: rtsp://admin:admin@127.0.0.1:554/mpeg4/ch2/sub/av_stream
海康-预览取流-新版规则 rtsp://<username>:<password>@<ipaddress>:<port>/Streaming/Channels/<id>(?parm1=value1&parm2=value2)
示例:rtsp://admin:admin@127.0.0.1:554/Streaming/Channels/101
海康-回放取流 rtsp://<username>:<password>@<ipaddress>:<port>/Streaming/tracks/<id>(?parm1=value1&parm2=value2)
示例:rtsp://admin:admin@127.0.0.1:554/Streaming/tracks/101?starttime=20180902t123812z&endtime=20180902t124816z
RTSP接入方面,live555和ffmpeg,是市面上兼容性最强的两个组件,各有长短,live555结构复杂、ffmpeg整体庞大;以live555作为摄像机RTSP接入的方案,能非常方便实现部分功能的定制,也会遇到OPTIONS发送的问题:
当采用RTP over UDP/TCP方式在取流的过程中,RTSPClient(live555)可能长时间都在从RTSPServer(IPC/NVR)取流,但缺没有向RTSPServer发送保活报文,如果服务器端启动了Session保活检测机制(参看live555中RTSPServer中noteliveness实现),服务器端长时间没有收到客户端发送的数据包,就会认为客户端连接是假连接,主动断开与客户端的连接(不管客户端是否正在取流);
为了解决上述的问题,大部分的RTSPClient客户端都会定时(例如30s)向RTSPServer发送OPTIONS(有的也有可能发送的是GET_PARAMETER)命令,类似于保活报文,这样服务器端就能正常地发送直播数据流了;
并不是所有的RTSPServer都做的那么好,就比如海康的某些IPC/NVR型号,当RTSPClient在拉流的过程中,突然发送OPTIONS保活报文,就像是发送了一个垃圾数据一样,RTSPServer自动就将整条RTSP连接断开了,导致RTP取流也随着停止了,我们只能在这类设备中,选择不发送OPTIONS保活包;
LiveNVR解决了上述各种问题,是一个传统安防互联网化的解决方案: