当前位置:网站首页>onvif/rtsp转gb28181协议,无缝对接国标平台
onvif/rtsp转gb28181协议,无缝对接国标平台
2022-08-02 03:34:00 【刚入视频监控行业的菜鸡】
前言
现在市面上很多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%[email protected]%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协议转换网关,再由网关向海康平台注册
2:本地文件取流:
通过本地的MP4文件取流的方式,再由28181协议转换网关将流推送给海康平台,效果如下图显示
总结
上诉就是非标转国标28181网关的简单介绍,后续上传网关demo给各位小伙伴
边栏推荐
猜你喜欢
与TI的lvds芯片兼容-GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片,
The use and simulation of vector implementation:
Comparison between Boda Industrial Cloud and Alibaba Cloud
同时求最大值与最小值(看似简单却值得思考~)
Host your own website with Vercel
【网络基础】浏览器输入一个URL之后,都发生了什么(详细讲解)
【操作系统】线程安全保护机制
Altium Designer基础知识
Personal image bed construction based on Alibaba Cloud OSS+PicGo
unity 代码拆分图集
随机推荐
Mac安装MySQL详细教程
unity相关的功能链接
【LeetCode】Merge
Application of electronic flow on business trip
【TCS3200 color sensor and Arduino realize color recognition】
install 命令
开源代码交叉编译操作流程及遇到的问题解决(lightdm)
R语言 —— 多元线性回归
功能性网站
所有子字符串中的元音 —— LeetCode - 2063
【Connect the heart rate sensor to Arduino to read the heart rate data】
龙芯2K1000使用nfs挂载文件系统进行使用
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
滑动窗口方法
【面试必看】链表的常见笔试题
字符串匹配(蛮力法+KMP)
proteus数字电路仿真——入门实例
剑指Offer 31.栈的压入、弹出
Process (below): process control, termination, waiting, replacement
STM32F4 CAN 配置注意的细节问题