当前位置:网站首页>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给各位小伙伴
边栏推荐
猜你喜欢

Basic IO (below): soft and hard links and dynamic and static libraries

Process (in): process state, process address space

Personal image bed construction based on Alibaba Cloud OSS+PicGo

Application of electronic flow on business trip

功能性网站

振芯科技GM8285C:功能TTL转LVDS芯片简介

判断回文

使用buildroot制作根文件系统(龙芯1B使用)

GM8775C MIPI转LVDS调试资料分享

判断子序列 —— LeetCode-392
随机推荐
剑指Offer 04.二位数组中的查找 线性查找
【详解】优先级队列的底层实现
电脑基本知识
进程(下):进程控制、终止、等待、替换
unity相关的功能链接
【plang 1.4.4】编写茶几玛丽脚本
path 修补文件命令
idea中创建jsp项目详细步骤
蛮力法求解凸包问题
Anaconda(Jupyter)里发现不能识别自己的GPU该怎么办?
【plang1.4.3】语言新特性:集合
IoT solution
单 词替换
ICN6211:MIPI DSI转RGB视频转换芯片方案介绍 看完涨知识了呢
进程(番外):自定义shell命令行解释器
字符串匹配(蛮力法+KMP)
笔记本电脑充电问题
剑指Offer 32.Ⅱ从上到下打印二叉树
倒排单词
Basic IO (on): file management and descriptors