项目简介

  • 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相关推荐

  1. 微信二次开发SDK使用教程--手机检测到有人点赞/取消点赞通知服务端

    微信二次开发SDK使用教程--手机检测到有人点赞/取消点赞通知服务端 case CircleLikeNotice : {//手机检测到有人点赞/取消点赞通知 log.debug("socke ...

  2. 微信机器人开发SDK使用教程--养号任务停止

    微信机器人开发SDK使用教程--养号任务停止 case "PostStopWeChatMaintenanceTask": {// 养号任务停止 log.debug("we ...

  3. Jeewx-Api 1.3.2 版本发布,微信开发SDK

    JEEWX-API 是一款JAVA版的微信开发SDK,支持微信公众号.小程序.微信企业号.支付宝生活号SDK和微博SDK.你可以基于她,快速的傻瓜化的进行微信开发.支付窗开发和微博开发. 基于jeew ...

  4. 微信开发SDK,Jeewx-Api 1.3.1 版本发布

    JEEWX-API 是一款JAVA版的微信开发SDK,支持微信公众号.小程序.微信企业号.支付宝生活号SDK和微博SDK.你可以基于她 快速的傻瓜化的进行微信开发.支付窗开发和微博开发. 基于jeew ...

  5. JPEG2000开发SDK及其特点

    JPEG2000开发SDK及其特点 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:JPEG2000被开发来取代JPEG,但因为大量核心算法被专利注册, ...

  6. 微信机器人开发SDK使用教程--删除朋友圈

    微信机器人开发SDK使用教程--删除朋友圈 case "DeleteSNSNewsTask": {// 删除朋友圈 log.debug("websocket:msgtyp ...

  7. 微信机器人开发SDK使用教程--群发消息任务

    微信机器人开发SDK使用教程--群发消息任务 case "WeChatGroupSendTask": {// 群发消息任务 log.debug("websocket:ms ...

  8. 小程序后台开发sdk

    小程序后台开发sdk链接:https://github.com/tencentyun/wafer2-node-sdk

  9. 微信二次开发sdk非ipad/android协议(很好用)

    转自 https://github.com/tangjinjinwx/Public.WeChat.CRM.SDK 个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 非微信 ...

最新文章

  1. Exchange 2007更改用户收发邮件大小限制
  2. RansomCoin 二进制中提取加密货币地址
  3. qt on android qml,Qt on Android: Qt Quick 之 Hello World 图文详解
  4. Java中switch语句支持的类型
  5. 【CMD】复制并覆盖目标文件
  6. Python爬虫入门之四urllib-GET与POST请求
  7. linux内核删不掉,linux 删除内核文件,未能启动,修复方法 CDROM与网络法
  8. Ubuntu更换gnome桌面环境后不能root登录
  9. 腾讯暑期日常实习前端面试
  10. 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了
  11. 蚂蚁集团,打响2022反内卷第一枪?
  12. SpringBoot下Mybatis-注解动态sql开发的坑
  13. 如何根据芯片手册时序图编写驱动程序
  14. 许怡然:网游创业失败全攻略
  15. HTML5中多媒体标签之音频标签
  16. Monyer黑客小游戏 踩坑总结
  17. Environment 的使用
  18. 5.4 微程序控制器
  19. r语言nonzerocoef函数_lars算法R语言操作指南.pdf
  20. 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为0)

热门文章

  1. 微信小程序吸底区域适配iPhone X
  2. text段、data段和bss段知识介绍
  3. wordpress如何让百度快速收录_网站文章如何快速被收录?百度快速收录功能可以试一下...
  4. ubuntu的 Files资源管理器打不开解决方案(桌面文件夹打不开)
  5. iPhone开机密码提示你输入错误,你千万要这样做,不看后悔吧!
  6. linux 前后台进程详解
  7. [iOS开发] 电子书下载链接
  8. sklearn之高斯混合模型
  9. 2016脑力高危职业榜出炉,高薪与高危同在?
  10. 双线性内插怎么缩小_鼻翼缩小该做内切还是外切?会留疤吗?恢复期是多久?...