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


#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)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

你可能感兴趣的:(GB28181)