onvif/rtsp转gb28181协议,无缝对接国标平台

前言

现在市面上很多ipc已经支持gb28181,当然,也有极个别的不支持。针对那些已经安装部署的老式摄像机,不支持28181协议又想接入国标平台,怎么办?

这个时候,我们可以采取rtsp或者onvif等非标协议转换为国标协议,从而可以轻松的实现与28181平台的无缝对接。

一、onvif搜索

这里将onvif封装成了跨平台库,便于其他模块调用。目前对外只提供简单的功能,例如onvif初始化、onvif添加设备、获取onvif设备的rtsp地址、云台控制(预置位)以及告警上报回调接口,当然还有其他接口,可以需要的时候,一一对外提供。
具体代码如下:

#ifndef ONVIFCLIENT_API_H
#define ONVIFCLIENT_API_H

#ifdef WIN32
#define WIN32_OS 1
#define VXWORKS_OS 0
#define LINUX_OS 0
#else
#define WIN32_OS 0
#define VXWORKS_OS 0
#define LINUX_OS 1
#endif

#ifdef WIN32
#ifdef ONVIFCLIENT_EXPORTS
#define ONVIFCLIENT_API __declspec(dllexport)
#else
#define ONVIFCLIENT_API __declspec(dllimport)
#endif

#ifdef ONVIFCLIENT_STATIC
#undef ONVIFCLIENT_API
#define ONVIFCLIENT_API
#endif
#else
#define ONVIFCLIENT_API
#endif

typedef void(*event_callback)(void * pdata);

#ifdef __cplusplus
extern “C” {
#endif

ONVIFCLIENT_API bool InitOnvifClient();
ONVIFCLIENT_API void* AddDevice(const char* ip, int nPort, const char* user_name, const char* password);
ONVIFCLIENT_API bool GetStreamUri(char *rtspUri, void *arg);
ONVIFCLIENT_API bool ControlPtz(void *arg, int ptz_cmd, int p1, char *name="");
ONVIFCLIENT_API bool setEventCallback(event_callback callback);

#ifdef __cplusplus
}
#endif

#endif

二、sip注册等一系列功能

这里只列举28181注册部分代码

代码如下:

SIP_MSG * sip_build_register_normal_msg(SIP_USER * p_user, uint32 srv_ip, uint16 srv_port)
{
SIP_MSG * send_msg = get_msg_buf();
if (send_msg == NULL)
{
return NULL;
}

send_msg ->msg_type = 0;
send_msg ->msg_sub_type = SIP_MT_REG;
send_msg ->msg_crpty_mode = p_user->user_crpty_mode;
send_msg ->local_port = p_user->sip_port;

sip_add_send_msg_fline(send_msg , "REGISTER", "%s SIP/2.0", p_user->server_sip_addr);

sprintf(p_user->auth_via.branch, "z9hG4bK%x", sys_os_get_uptime());

if (p_user->usrf_tcp_sip == 1)
{
	sip_add_send_msg_via(send_msg , "SIP/2.0/TCP %s:%u;branch=%s", p_user->user_ip, p_user->user_port, p_user->auth_via.branch);
}		
else
{
	sip_add_send_msg_via(send_msg , "SIP/2.0/UDP %s:%u;branch=%s", p_user->user_ip, p_user->user_port, p_user->auth_via.branch);
}
sip_reg_build_from(send_msg ,p_user);
sip_reg_build_to(send_msg ,p_user);
sip_reg_build_contact(send_msg ,p_user);

if (p_user->auth_call_id[0] == '\0')
{
	sprintf(p_user->auth_call_id, "%08X%08X@%s", rand(), rand(), p_user->user_ip);
}

sip_add_send_msg_line(send_msg , "Call-ID", "%s", p_user->auth_call_id);

p_user->auth_cseq++;
if (p_user->auth_cseq == 0)
{
	p_user->auth_cseq = 1;
}

sip_add_send_msg_line(send_msg , "CSeq", "%d REGISTER", p_user->auth_cseq);
sip_add_send_msg_line(send_msg , "Max-Forwards", "70");
sip_add_send_msg_line(send_msg , "Expires", "%u", p_user->expires_time);
sip_add_send_msg_line(send_msg , "User-Agent", "%s", p_user->user_agent_desc);
sip_add_send_msg_line(send_msg , "Content-Length", "0");

send_msg ->remote_ip = srv_ip;
send_msg ->remote_port = srv_port;

p_user->last_reg_time = get_uptime();

return send_msg ;

}

三、效果展示

1、rtsp网络取流:海康平台的udp,tcp流展示效果,如下图,通过onvif协议,将设备接到28181协议转换网关,再由网关向海康平台注册
rtsp取流,再由28181网关统一去注册
2:本地文件取流:
通过本地的MP4文件取流的方式,再由28181协议转换网关将流推送给海康平台,效果如下图显示
在这里插入图片描述
在这里插入图片描述


总结

上诉就是非标转国标28181网关的简单介绍,后续上传网关demo给各位小伙伴

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
1、支持国标GB28181平台国标GB28181 IPC和国标GB28181 NVR设备同时接入 (支持GB28181-2011版本和GB28181-2016版本)     2、支持国标GB28181设备注册和注销,对所有设备进行管理,获取资源 对资源列表进行管理     3、支持国标GB28181的目录订阅,对接收的订阅通知进行处理     4、支持国标GB28181实时视频请求(支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     5、支持国标GB28181 PTZ控制     6、支持国标GB28181 录像查询     7、支持国标GB28181 历史视频点播 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     8、支持国标GB28181 历史视频下载 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     9、支持对接收的国标实时视频码流和历史视频码流进行管理     10、支持将国标的PS码流换成ES码流     11、支持丢包打印和断流打印     13、支持RTSP服务和RTSP会话管理     14、支持RTSP客户端 UDP传输和TCP传输     15、支持国标GB28181设备5000路左右的接入管理,支持国标请求视频在100路左右     16、支持国标28181设备和通道写入mysql数据库      17、支持设备的云台PTZ控制,控制类型:上"up",下"down",左"left",右"right",左上"leftup",左下"leftdown",右上"rightup",右下"rightdown",镜头近"zoomin",镜头远"zoomout", 焦距远"focusfar",焦距近"focusnear", 设置预置位"setpos",调预置位"callpos"     18、支持历史视频的查询和历史视频的点播控制     19、支持对国标设备的控制,"record":录像开启和停止-通道id "guard":布放和撤防-报警通道id "reboot":设备重启-设备id "keyfame":强制关键帧-通道id     20、支持对实时视频的图片截图,通过http直接访问图片    21、支持rtmp和hls会话一直保留    22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知    23、支持公网和局域网同时存在
RTSP(Real Time Streaming Protocol)是一种用于在计算机网络上实时传输音频和视频的协议。它提供了一种标准的方法,使得用户可以实时地接收和播放音视频数据流。GB28181是中国国家标准,旨在规范监控设备之间的实时视频流传输和控制。它基于RTSP协议,并额外定义了一些特定的数据结构和通信方式,以满足中国国内监控设备市场的需要。 而ONVIF(Open Network Video Interface Forum)是一个开放的行业组织,旨在促进网络视频设备的互操作性。ONVIF定义了一系列标准和协议,使不同厂商生产的监控设备能够互相通信和集成。ONVIF协议包括了设备发现、实时流传输、设备控制等功能,使得用户能够通过统一的接口管理和控制不同品牌的摄像头、录像机等设备。 RTSPGB28181以及ONVIF这三个概念其实是密切相关的。GB28181可以看作是在RTSP协议基础上进行了定制和扩展,以满足中国国内监控设备市场的需求。而ONVIF则是一个更加广泛的标准,旨在解决全球范围内的网络视频设备互操作性问题。ONVIF协议也是基于RTSP协议进行开发的,可以与支持RTSP协议的设备进行通信。 综上所述,RTSPGB28181ONVIF都是与实时视频流传输和设备互操作性相关的概念。RTSP是一种协议,用于实时传输音视频数据;GB28181是中国国内的监控设备标准,基于RTSP协议进行了定制;而ONVIF则是一个全球范围的标准,使得不同品牌的监控设备能够互相通信和集成。这些标准和协议的发展和应用,为监控设备的智能化和网络化提供了方便和可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值