视频监控安防平台-国标28181SDK(2016版)、GB28181SDK(2016版) 和demo-提供c++库和测试demo

版权声明:本文为博主原创文章,未经博主允许不得转载。QQ/微信联系:123011785 https://blog.csdn.net/songxiao1988918/article/details/78733508

                 视频监控安防平台-国标28181SDK(2016版)、GB28181SDK(2016版) 和demo-提供c++库和测试demo

最近帮一朋友开发了一套国标28181-2016SDK,采用exosip协议栈来开发的支持GB28181-2016的最新协议,支持GB28181 IPC接入、DVR接入、NVR接入和GB28181下级平台设备同时接入功能,后面会提供28181SDK和demo的下载路径,运行环境是在centos7.3 64位linux服务器上面编译的C++库(lib28181sdk.so),需要demo的也可联系QQ:123011785。

支持的功能:

1、接收GB28181设备或者平台注册、注销功能,管理所有注册的28181设备或者平台。

2、接收GB28181设备或者平台心跳功能,心跳超时能将内存里面的管理设备或者平台下线回调事件功能。

3、GB28181设备或者平台主动布防撤防功能。

4、获取GB28181设备或者平台的资源列表功能,并对获取的到设备列表进行管理,设备管理可以达到1000路以上。

5、对GB28181设备或者平台进行系统目录订阅,接收到消息根据事件回调出接口。

6、GB28181设备或者平台进行实时视频点播开始和结束功能,并对每路设备实时视频码流状态进行管理,将码流回调出来,支持不少于100的多路并发功能。

7、GB28181设备或者平台进行PTZ控制功能,支持向上、向下、向左、向右、放大、缩小、聚焦、预置位设置、预置位调用、预置位删除等功能。

8、GB28181设备或者平台进行录像查询功能。

9、GB28181设备或者平台进行历史视频点播开始和结束功能,并对每路设备实时视频码流状态进行管理,将码流回调到上层接口。

10、GB28181设备或者平台进行历史视频进行下载功能,并对每路设备实时视频码流状态进行管理,将码流回调到上层接口。

11、GB28181设备或者平台进行历史视频点播控制功能,支持播放、暂停、快放、慢放和随机拖放等功能,如果平台支持倒放功能可以协商协议进行倒放功能。

12、对GB28181设备或者平台上线、下线进行事件回调功能。

    以上功能是最基础的GB28181功能点也是最常用的功能,也可以根据需求定制化开发GB28181其他功能(解码器上墙、语音广播对讲、设备移动位置订阅、主码流和子码流协议锁和解锁协议规范、点播控制协议单帧向前后向前向后播放)、画面分割器协议、键盘切换轮训计划协议、解码器控制通知协议字符叠加协议等各种功能),支持非标准GB28181设备的接入,后面可以根据不同码流格式进行转码,支持H265、H264、MPEG4、MPEG2等格式转码,支持各种分辨率的转码功能,支持码流压缩倍率在10:1比例,支持码流PS流、ES流、TS流等码流的各种转换。

目前只有linux版本的GB28181SDK和demo,后面会提供windos版本的GB28181SDK和demo。欢迎大家试用:

提供接口以代码形式呈现:

头文件28181SDK.h:

/******************************************************************************
* FILE:	28181SDK.h
* Description:
*	Interface class of communicating between service agent and DB connector.
*
* Modified Code History
* Mark  Date        By          Modification Reason
*******************************************************************************
* 01    2017-10-4    songxw Initial creation.
******************************************************************************/

#if !defined(__28181_NETSDK_H__)
#define __28181_NETSDK_H__

using namespace std;
#if 0
//-----------------------------------------------------------
//PTZ控制
#define PTZ_OPT_UP              1          // 方向
#define PTZ_OPT_UP_STOP         2          // 
#define PTZ_OPT_DOWN            3          // 
#define PTZ_OPT_DOWN_STOP       4          // 
#define PTZ_OPT_LEFT            5          // 
#define PTZ_OPT_LEFT_STOP       6          // 
#define PTZ_OPT_RIGHT           7          // 
#define PTZ_OPT_RIGHT_STOP      8          // 
#define PTZ_OPT_UR              9          // 
#define PTZ_OPT_UR_STOP         10          // 
#define PTZ_OPT_UL              11          // 
#define PTZ_OPT_UL_STOP         12          // 
#define PTZ_OPT_DR              13          // 
#define PTZ_OPT_DR_STOP         14          // 
#define PTZ_OPT_DL              15          // 
#define PTZ_OPT_DL_STOP         16          // 
#define PTZ_OPT_ZOOMIN          17          // 缩放
#define PTZ_OPT_ZOOMIN_STOP     18          // 
#define PTZ_OPT_ZOOMOUT         19          // 
#define PTZ_OPT_ZOOMOUT_STOP    20          // 
#define PTZ_OPT_FOCUSNEAR       21          // 焦距
#define PTZ_OPT_FOCUSNEAR_STOP  22          // 
#define PTZ_OPT_FOCUSFAR        23          // 
#define PTZ_OPT_FOCUSFAR_STOP   24          // 
#define PTZ_OPT_POS_SET         25          // 预置位
#define PTZ_OPT_POS_CLEAR       26          // 
#define PTZ_OPT_POS_CALL        27          // 调用预置位

//点播控制类型
#define HIS_VIDEO_CTRL_PLAY     1		//点播播放控制
#define HIS_VIDEO_CTRL_FAST     2		//点播快放控制
#define HIS_VIDEO_CTRL_SLOW     3		//点播慢放控制
#define HIS_VIDEO_CTRL_PAUSE    4		//点播暂停控制
#define HIS_VIDEO_CTRL_JUMP    	5		//点播跳转控制

//-------------------------------------------------------------
//事件回调类型
typedef enum
{
	EVENT_REGISTER_STATUS	= 1,	//注册回调 (下级平台或则设备注册和注销)
	EVENT_DEVICE_CATALOG	= 2,	//设备目录 (下级平台或则设备推送完资源目录之后回调xml格式)
	EVENT_DEVICE_ALARM		= 3,	//设备报警 (下级平台或则设备推送的报警消息)
	EVENT_HISVIDEO_STOP_NOTIFY		= 4,	//历史视频通知 (点播或则下载结束之后通知类型)
}EventCallBackType_E;
#endif

typedef void (*EventCallbackDefine)(int eventtype, int eventparam, int datalen, char *data);
typedef void (*StreamCallbackDefine)(long handle, int datatype, int datalen, unsigned char *data, long userdata);

#ifdef __cplusplus
extern "C"{
#endif
	//初始化
	int C_InitSDK(char *svrip, int listenport, char *svrpubid, char *username, char *password, EventCallbackDefine eventcallback);
	
	//反初始化
	int C_UnInitSDK(void);

	//向设备获取资源列表;异步返回
	//pubid为空,获取所有;或者为某个下级pubid,只获取该下级id的资源
	int  C_GetResource(char *pubid);
	
	//获取本地已存在的资源列表;主动返回
	//pubid为空,获取所有;为某个下级获取该下级所有资源;为某个通道获取该通道信息
	const char *C_GetLocalResource(char *pubid);

	//实时视频开始
	long C_RealVideoStart(char *chanpubid, StreamCallbackDefine realcallback, long userdata);

	//实时视频结束
	int C_RealVideoStop(long realhandle);

	//设备控制
	int C_Ptz(char *chanpubid, int ptztype, int ptzparam);

	//历史视频查询,异步返回
	const char *C_HisVideoQuery(char *chanpubid, char *begintime, char *endtime);

	//历史视频开始
 	long C_HisVideoStart(char *chanpubid, char *begintime, char *endtime, StreamCallbackDefine hiscallback, long userdata, int download);

	//历史视频结束
 	int C_HisVideoStop(long hishandle);

	//历史视频控制
	int C_HisVideoCtrl(long hishandle, int ctrltype, long ctrlparam);
#ifdef __cplusplus
}
#endif

#endif  //__SOAP_CLIENT_EVT_PROC_H__

运行的demo程序testmain.cpp粘贴

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include "28181SDK.h"


static bool bGetLoaclRes = false;
//打印事件回调信息
void enventcallback(int eventtype, int eventparam, int datalen, char *data)
{
	printf("eventtype:%d, eventparam:%d, datalen:%d, data:%s\n", eventtype, eventparam, datalen, data);
	if (eventtype == 2)
	{
		bGetLoaclRes = true;
	}
	else if (eventtype == 1 && eventparam == 1)
	{
		C_GetResource(NULL);
	}
}

//打印码流回调信息
void streamcallback(long handle, int datatype, int datalen, unsigned char *data, long userdata)
{
	printf("handle:%ld, datatype:%d, datalen:%d, userdata:%ld\n", handle, datatype, datalen, userdata);
}

int main()
{
	int iRet = -1;
	//初始化设置  SIP服务器的IP、端口、地址编码(必须为200平台类型)、用户名、密码、事件回调函数
	iRet = C_InitSDK((char *)"192.168.1.230", 5061, (char *)"11000000002000000001", (char *)"11000000002000000001", (char *)"12345678a", enventcallback);
	printf("1.InitSDK return :%d\n", iRet);
	//等待资源推送
	while (true)
	{
		if (bGetLoaclRes)
			break;
		sleep(1);
	}
	sleep(5);
	//获取已经推送的所有资源
	printf("1.GetLocalResource Body:%s\n", C_GetLocalResource(NULL));

	sleep(10);
	//开始实时视频1  ID需要自己根据推送获取
	long lrealhandle1 = C_RealVideoStart((char *)"11010000001310000001", streamcallback, 1024);
	printf("RealVideoStart lrealhandle:%d\n", lrealhandle1);
	//开始实时视频2  ID需要自己根据推送获取
	long lrealhandle2 = C_RealVideoStart((char *)"11010000001310000002", streamcallback, 1024);
	printf("RealVideoStart lrealhandle:%d\n", lrealhandle2);
	sleep(5);
	//停止实时视频1
	if (lrealhandle1 > 0)
		C_RealVideoStop(lrealhandle1);
	//停止实时视频2
	if (lrealhandle2 > 0)
		C_RealVideoStop(lrealhandle2);
	sleep(1);
	//PTZ控制
	C_Ptz((char *)"11010000001310000002", 1, 100);
	sleep(1);
	//PTZ控制结束
	C_Ptz((char *)"11010000001310000002", 2, 0);
	sleep(5);
	//查询历史视频
	printf("2.C_HisVideoQuery Body:%s\n", C_HisVideoQuery((char *)"11010000001310000002", (char *)"2017-12-06T09:26:00", (char *)"2017-12-06T09:50:00"));
	
	sleep(5);
	//点播历史视频
	long hishandle1 = C_HisVideoStart((char *)"11010000001310000002", (char *)"2017-12-06T09:26:00", (char *)"2017-12-06T09:50:00", streamcallback, 2048, 0);
	printf("C_HisVideoStart hishandle1:%d\n", hishandle1);
	sleep(5);
	if (hishandle1 > 0)
	{
		//点播控制
		// 1.点播慢放控制
		C_HisVideoCtrl(hishandle1, 3, 2);
		sleep(5);
		// 2.点播暂停控制
		C_HisVideoCtrl(hishandle1, 4, 0);
		sleep(10);
		// 3.点播播放控制
		C_HisVideoCtrl(hishandle1, 1, 0);
		sleep(10);
		// 4.点播快放控制
		C_HisVideoCtrl(hishandle1, 2, 4);
		sleep(10);
		// 5.点播跳转控制
		C_HisVideoCtrl(hishandle1, 5, 500);
		sleep(10);
		// 6.点播快放控制
		C_HisVideoCtrl(hishandle1, 1, 0);
	}
	sleep(10);
	//结束点播控制
	C_HisVideoStop(hishandle1);
	
	sleep(50);
	C_UnInitSDK();
	
	return 0;
}

编译:

g++ testmain.cpp -L./ -l28181sdk -lpthread -Wl,-Bdynamic -lgcc_s -lrt -luuid -rdynamic -o test.out

lib28181sdk.so库和demo文件下载地址:

http://download.csdn.net/download/songxiao1988918/10148473

猜你喜欢

转载自blog.csdn.net/songxiao1988918/article/details/78733508
今日推荐