GB28181开发SDK
项目简介
- GB28181协议设备端SDK,作为下级,支持GB/T28181-2011和GB/T28181-2016版本。支持linux X86平台、海思ARM系列平台等。兼容目前市面绝大部分主流厂商上级平台(如海康、大华、宇视、东方网力等),目前提供linux x86 64位下的库文件及demo(若有兴趣,欢迎通过以下联系方式跟我联系提供其它linux或arm平台下的库及demo)。
- 编译环境:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
- SDK下载地址:https://gitee.com/liuchen1206/GB28181DeviceSDK
- 欢迎试用交流反馈您的宝贵意见。
联系方式(E-mail:liuchen1206#163.com)。
功能清单
- 库提供C语言风格接口,支持C/C++二次开发
- 设备注册功能
- 心跳保活功能,掉线后自动重注册上线
- 设备目录查询功能
- 实时视频功能,支持UDP和TCP两种方式取流,支持H264、H265、G711A
- 设备云台控制功能
- 历史录像检索功能
- 录像回放功能,支持UDP和TCP两种方式,支持倍速回放、暂停、拖放等
- 录像下载功能
- 手动录像开启/停止
- 报警布防\撤防功能
- 设备信息、设备状态、设备配置等查询功能
- 设备网络校时功能
- 设备远程重启功能
SDK接口
- 接口文件GBDeviceSDK.h
#ifndef __GBSERVERSDK_H__
#define __GBSERVERSDK_H__
#include "GBCommon.h"#ifdef WIN32
#define strcasecmp stricmp
#define strncasecmp strnicmp#ifdef GB_SDK_EXPORTS //动态库编译
#define _GB_SDK_EXPORTS __declspec(dllexport)
#else//使用者编译
#define _GB_SDK_EXPORTS __declspec(dllimport)
#endif#else
#define _GB_SDK_EXPORTS __attribute__ ((visibility("default")))
#endif//
//接口定义
/********************************接口函数声明*********************************/
/************************************************************************/
/*
* 作用:GB28181模块初始化
* 参数:
* pSipServerInfo: SIP服务器相关参数
* pGb28181ChannelID: 视频通道ID数组
* nChannelNum: 视频通道数量
* pGb28181AlarmID: 报警通道数组
* nAlarmNum: 报警通道数量
* pNotifyCB: 消息函数通知指针
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_Init(const GB_SIP_SERVER* pSipServerInfo,const GB_CHANNEL_ITEM* pGb28181ChannelID,int nChannelNum,const GB_CHANNEL_ITEM* pGb28181AlarmID,int nAlarmNum,GB_NOTIFY_CB pfnNotifyCB, void* pUser);/************************************************************************/
/*
* 作用:GB28181模块启用
* 参数:
* 无
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_Start();/************************************************************************/
/*
* 作用:GB28181模块停止
* 参数:
* 无
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_Stop();/************************************************************************/
/*
* 作用:GB28181模块反初始化
* 参数:
* 无
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_Quit();/************************************************************************/
/*
* 作用:获GB28181模块注册状态
* 参数:
* 无
* 返回值:返回GB28181当前状态,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_STATUS GB_SDK_GetStatus();/************************************************************************/
/*
* 作用:向模块插入实时流媒体帧数据
* 参数:
* lTaskID 任务GUID(该值由LivePlayStart()中返回)
* pFrameHead: 媒体帧头部
* pData: 媒体数据
* bPlayback: 是否回放流
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_InputData(unsigned long lTaskID, const GBFrameInfo* pFrameHead, const char* pData, bool bPlayback);/************************************************************************/
/*
* 作用:向模块插入对讲帧数据
* 参数:
* pTaskGUID: 任务GUID(该值由TalkbackStart()中返回)
* pFrameHead: 媒体帧头部
* pData: 媒体数据
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_InputTalkbackData(unsigned long lTaskID, const GBFrameInfo* pFrameHead, const char* pData);/************************************************************************/
/*
* 作用:更新报警状态
* 参数:
* nAlarmID: 报警通道ID(0,1,2,3...)
* uAlarmType: 报警类型
* uAlarmStatus: 报警状态
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_UpdateAlarmStatus(int nAlarmID, unsigned short uAlarmType, unsigned short uAlarmStatus);/************************************************************************/
/*
* 作用:启用/禁用GPS信息上报
* 参数:
* bEnable: 是否启用
* uTime: 上报时间间隔,单位为毫秒
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:GB28181库内部默认是不启用
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_SetGpsInterval(bool bEnable, unsigned int uTime);/************************************************************************/
/*
* 作用:更新GPS信息
* 参数:
* pGPSInfo GPS信息
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_SetGpsInfo(const GPS_INFO *pGPSInfo);/************************************************************************/
/*
* 作用:立即上报GPS信息
* 参数:无
* 返回值:返回GB28181操作结果,状态在“GB_ERROR”中定义
* 备注:无
*/
/************************************************************************/
_GB_SDK_EXPORTS GB_ERROR GB_SDK_ReportGpsImmediate();#endif // __GBSERVERSDK_H__
- GBCommon.h
#ifndef __GB28181_COMMON_DEFINE__H__
#define __GB28181_COMMON_DEFINE__H__
#include<string>#pragma pack( 4)#define GB_SHORT_LEN 32
#define GB_LONG_LEN 64const unsigned int GB_MAX_CAMERA_NUM = 64;//无效索引
#define INVALID_INDEX(type) (static_cast<type>(~(type)0x0))enum GB_ERROR
{GB_ERR_SUCCESS, // successGB_ERR_FAILD, // faildGB_ERR_PERMISSION_DENIED, // permission deniedGB_ERR_UNAUTHORIZED, // unauthorizedGB_ERR_INVALID_PARAMETER, // invalid paramterGB_ERR_SYSTEM_BUSY, // system busyGB_ERR_PENDING, // pendingGB_ERR_NETWORK_ERROR, // network errorGB_ERR_NOT_EXIST, // not existGB_ERR_BUFFER_FULL, // buffer fullGB_ERR_IGNORE, // should ignoreGB_ERR_NOT_SUPPORTED, // not supportedGB_ERR_UNKNOWN_ERROR, // unknown error
};typedef struct _gb_device_init_info
{int nLocalVideoInputNum;int nNetVideoInputNum;int nAudioInputNum;int nSensorInputNum;int nMaxALarm;int nMaxAudio;int nDeviceType;int nProductType;int nDevVer;unsigned int nSoftVer;unsigned int nBuildTime;char szDeviceName [20];
}GB_DEV_INIT_INFO;typedef enum _gb_status
{STATUS_UNREGISTER = 0, //no registerSTATUS_REGISTER = 1, //registered
}GB_STATUS;typedef struct _gb_sip_server
{char server_ip[32]; //上级SIP服务器IPunsigned short server_port; //上级SIP服务器端口unsigned int expires; //过期时间char server_id[GB_SHORT_LEN]; //服务器idchar user[GB_SHORT_LEN]; //注册用户名char passwd[GB_SHORT_LEN]; //注册密码char dvr_id[GB_SHORT_LEN]; //设备IDunsigned short dvr_port; //设备端口unsigned int keepaliveInterval; //keepalive时间间隔(单位为秒,默认60秒)char devowner[GB_LONG_LEN]; //设备归属char civilcode[GB_LONG_LEN]; //行政区域char installaddr[GB_LONG_LEN]; //安装地址unsigned int defaultStreamType; //默认码流类型(0:主码流, 1:子码流)
}GB_SIP_SERVER;typedef struct _gb_channel_item
{int nChannelID; //视频通道或者报警通道索引(0,1,2,3...)char gb28181ID[GB_SHORT_LEN];
}GB_CHANNEL_ITEM;typedef struct _gb_frame_info
{int nChannelID; //视频通道索引(0,1,2,3...)unsigned short streamType; //码流类型(在"STREAM_TYPE"中定义)unsigned char byFrameType; //帧类型(在“FRAME_TYPE”中定义)unsigned char keyFrame; //0 非关键帧 1:关键帧unsigned int frameIndex; //帧索引unsigned int width; //视频宽度(音频帧为0)unsigned int height; //视频高度(音频帧为0)unsigned int length; //帧数据长度(不包括帧头)long long time; //帧时间戳(微秒)
}GBFrameInfo;
#define GBFRAME_LEN sizeof(GBFrameInfo)typedef enum _frame_type
{FRAME_TYPE_NONE = 0x00,FRAME_TYPE_VIDEO = 0x01,FRAME_TYPE_AUDIO = 0x02,FRAME_TYPE_TALK_AUDIO = 0x03,FRAME_TYPE_END = 0x04,
}FRAME_TYPE;typedef struct _frame_info_ex
{unsigned long keyFrame; //0 不是关键帧unsigned long frameType;unsigned long length;unsigned long width;unsigned long height;unsigned char *pData;unsigned long channel;unsigned long frameIndex;//帧索引,快进模式时,2表示2倍速,4表示4倍速unsigned long streamID;long long time; //在帧绝对时间,年月日时分秒浩渺,在改变设备时间时会变化
}FRAME_INFO_EX; //用于本地使用typedef struct _ptz_ctrl
{unsigned long chnn; //哪个通道unsigned long speed; //控制速度unsigned long cmdType; //命令类型unsigned long cmdValue; //命令参数:预置点序号,巡航线序号,轨迹序号等
}PTZ_CTRL;enum STREAM_TYPE
{STREAM_NULL = -1,STREAM_VIDEO = 0, // 实时视频STREAM_AUDIO,STREAM_PLAYBACK,STREAM_TALKBACK,STREAM_END,
};typedef enum _replay_method
{METHOD_PLAY = 0, //播放METHOD_PAUSE = 1, //暂停METHOD_SEEK = 2, //SEEK
}REPLAY_METHOD;
//GPS信息
typedef struct _gps_info
{float fLongitude; //经度float fLatitude; //纬度float fSpeed; //速度(km/h 可选)float fDirection; //方向(0-360)int nAltiude; //海拔(单位m)}GPS_INFO;// Cmd type
#define NOTIFY_Play "Play"
#define NOTIFY_Stop "Stop"
#define NOTIFY_Playback "Playback"
#define NOTIFY_PlaybackStop "PlaybackStop"
#define NOTIFY_ManualRecStart "ManualRecStart"
#define NOTIFY_ManualRecStop "ManualRecStop"
#define NOTIFY_SetGuard "SetGuard"
#define NOTIFY_ResetGuard "ResetGuard"
#define NOTIFY_PtzCtl "PtzCtl"
#define NOTIFY_RecordQuery "RecordQuery"
#define NOTIFY_Event "Event"typedef enum _event_sub_type
{EVENT_TYPE_UNKNOWN = 0,EVENT_STREAM_END = 1, // stream task endEVENT_STREAM_SEEK = 2, // seek
}EVENT_SUB_TYPE;/************************************************************************//** 作用:SDK消息通知函数接口指针* 参数:* pNotifyType: notify type* pNotifyXml: SDK通知外部的数据XML* pRespXml: 外部返回SDK的数据XML* nRespSize: pRespXml缓冲区长度* pUser: 用户定义数据* 返回值:在“GB28181_RET”中定义* 备注:详细XML格式在“GB28181_SDK开发手册V1.0.0.1.docx”中定义*//************************************************************************/
typedef GB_ERROR (*GB_NOTIFY_CB) (const char* pNotifyType,const char* pNotifyXml, char* pRespXml, int nRespSize, void* pUser);#pragma pack()#endif
GB28181开发SDK相关推荐
- 微信二次开发SDK使用教程--手机检测到有人点赞/取消点赞通知服务端
微信二次开发SDK使用教程--手机检测到有人点赞/取消点赞通知服务端 case CircleLikeNotice : {//手机检测到有人点赞/取消点赞通知 log.debug("socke ...
- 微信机器人开发SDK使用教程--养号任务停止
微信机器人开发SDK使用教程--养号任务停止 case "PostStopWeChatMaintenanceTask": {// 养号任务停止 log.debug("we ...
- Jeewx-Api 1.3.2 版本发布,微信开发SDK
JEEWX-API 是一款JAVA版的微信开发SDK,支持微信公众号.小程序.微信企业号.支付宝生活号SDK和微博SDK.你可以基于她,快速的傻瓜化的进行微信开发.支付窗开发和微博开发. 基于jeew ...
- 微信开发SDK,Jeewx-Api 1.3.1 版本发布
JEEWX-API 是一款JAVA版的微信开发SDK,支持微信公众号.小程序.微信企业号.支付宝生活号SDK和微博SDK.你可以基于她 快速的傻瓜化的进行微信开发.支付窗开发和微博开发. 基于jeew ...
- JPEG2000开发SDK及其特点
JPEG2000开发SDK及其特点 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:JPEG2000被开发来取代JPEG,但因为大量核心算法被专利注册, ...
- 微信机器人开发SDK使用教程--删除朋友圈
微信机器人开发SDK使用教程--删除朋友圈 case "DeleteSNSNewsTask": {// 删除朋友圈 log.debug("websocket:msgtyp ...
- 微信机器人开发SDK使用教程--群发消息任务
微信机器人开发SDK使用教程--群发消息任务 case "WeChatGroupSendTask": {// 群发消息任务 log.debug("websocket:ms ...
- 小程序后台开发sdk
小程序后台开发sdk链接:https://github.com/tencentyun/wafer2-node-sdk
- 微信二次开发sdk非ipad/android协议(很好用)
转自 https://github.com/tangjinjinwx/Public.WeChat.CRM.SDK 个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 非微信 ...
最新文章
- Exchange 2007更改用户收发邮件大小限制
- RansomCoin 二进制中提取加密货币地址
- qt on android qml,Qt on Android: Qt Quick 之 Hello World 图文详解
- Java中switch语句支持的类型
- 【CMD】复制并覆盖目标文件
- Python爬虫入门之四urllib-GET与POST请求
- linux内核删不掉,linux 删除内核文件,未能启动,修复方法 CDROM与网络法
- Ubuntu更换gnome桌面环境后不能root登录
- 腾讯暑期日常实习前端面试
- 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了
- 蚂蚁集团,打响2022反内卷第一枪?
- SpringBoot下Mybatis-注解动态sql开发的坑
- 如何根据芯片手册时序图编写驱动程序
- 许怡然:网游创业失败全攻略
- HTML5中多媒体标签之音频标签
- Monyer黑客小游戏 踩坑总结
- Environment 的使用
- 5.4 微程序控制器
- r语言nonzerocoef函数_lars算法R语言操作指南.pdf
- 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为0)
热门文章
- 微信小程序吸底区域适配iPhone X
- text段、data段和bss段知识介绍
- wordpress如何让百度快速收录_网站文章如何快速被收录?百度快速收录功能可以试一下...
- ubuntu的 Files资源管理器打不开解决方案(桌面文件夹打不开)
- iPhone开机密码提示你输入错误,你千万要这样做,不看后悔吧!
- linux 前后台进程详解
- [iOS开发] 电子书下载链接
- sklearn之高斯混合模型
- 2016脑力高危职业榜出炉,高薪与高危同在?
- 双线性内插怎么缩小_鼻翼缩小该做内切还是外切?会留疤吗?恢复期是多久?...