GB28181开发SDK
项目简介GB28181协议设备端SDK,作为下级,支持GB/T28181-2011和GB/T28181-2016版本。支持linux X86平台、海思ARM系列平台等。兼容目前市面绝大部分主流厂商上级平台(如海康、大华、宇视、东方网力等),目前提供linux x86 64位下的库文件及demo(若有兴趣,欢迎通过以下联系方式跟我联系提供其它linux或arm平台下的库及demo)。编译环境:...
·
项目简介
- 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 64
const unsigned int GB_MAX_CAMERA_NUM = 64;
//无效索引
#define INVALID_INDEX(type) (static_cast<type>(~(type)0x0))
enum GB_ERROR
{
GB_ERR_SUCCESS, // success
GB_ERR_FAILD, // faild
GB_ERR_PERMISSION_DENIED, // permission denied
GB_ERR_UNAUTHORIZED, // unauthorized
GB_ERR_INVALID_PARAMETER, // invalid paramter
GB_ERR_SYSTEM_BUSY, // system busy
GB_ERR_PENDING, // pending
GB_ERR_NETWORK_ERROR, // network error
GB_ERR_NOT_EXIST, // not exist
GB_ERR_BUFFER_FULL, // buffer full
GB_ERR_IGNORE, // should ignore
GB_ERR_NOT_SUPPORTED, // not supported
GB_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 register
STATUS_REGISTER = 1, //registered
}GB_STATUS;
typedef struct _gb_sip_server
{
char server_ip[32]; //上级SIP服务器IP
unsigned short server_port; //上级SIP服务器端口
unsigned int expires; //过期时间
char server_id[GB_SHORT_LEN]; //服务器id
char user[GB_SHORT_LEN]; //注册用户名
char passwd[GB_SHORT_LEN]; //注册密码
char dvr_id[GB_SHORT_LEN]; //设备ID
unsigned 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 end
EVENT_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
更多推荐
已为社区贡献1条内容
所有评论(0)