基于 VC++控制台应用程序:GB28181Test 项目概述

基于 VC++控制台应用程序:GB28181Test 项目概述

程序之美

在这里插入图片描述

运行环境 win7下x64

1)具备接收28181设备或者平台注册、注销功能,管理所有注册的28181设备或者平台。
2)具备接收28181设备或者平台心跳功能,心跳超时能将内存里面的管理设备或者平台下线。
3)具备对28181设备或者平台校时功能。
4)具备目录查询功能,对获取的到设备列表进行管理。
5)具备实时点播开始和结束功能,对每路设备实时码流状态进行管理。
6)具备设备控制功能,支持向上、向下、向左、向右、放大、缩小、聚焦、预置位设置、预置位调用、预置位删除功能。
7)具备录像查询功能。
8)具备录像点播开始和结束功能,对每路历史流进行管理。
9)具备对录像点播进行控制功能,支持播放、暂停、快放、慢放和随机拖放。
10)具备目录订阅功能,对上线、下线设备进行上报。
11)具备布防和撤防功能,将获取到的报警消息进行上报。
12)具备多种获取资源信息的接口。

工程介绍

应用程序向导已为您创建了此 GB28181Test 应用程序。

本文件概要介绍组成 GB28181Test 应用程序的每个文件的内容。

GB28181Test.vcxproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,
其中包含生成该文件的 Visual C++
的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。

GB28181Test.vcxproj.filters
这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。
它包含有关项目文件与筛选器之间的关联信息。 在 IDE
中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。
例如,“.cpp”文件与“源文件”筛选器关联。

GB28181Test.cpp
这是主应用程序源文件。

/
其他标准文件:

StdAfx.h,StdAfx.cpp
这些文件用于生成名为 GB28181Test.pch 的预编译头 (PCH) 文件和
名为 StdAfx.obj 的预编译类型文件。

/
其他注释:

应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。

/

核心代码

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 GB28181SDK_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// GB28181SDK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。

//#define GB28181SDK_API 
#define GB28181SDK_EXPORTS
#ifdef GB28181SDK_EXPORTS
#define GB28181SDK_API __declspec(dllexport)
#else
#define GB28181SDK_API __declspec(dllimport)
#endif
//using namespace std;


//typedef void (*AlarmCallBack)(int type, char *content);
//typedef void (*RealDataCallBack)(long PlayHdl, unsigned int DataType,unsigned char* pBuffer, unsigned int BufSize, void *pUser);
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
	//初始化
	GB28181SDK_API int C_InitSDK(char *svrip, int listenport, char *svrpubid, char *username, char *password, EventCallbackDefine eventcallback);
	
	//反初始化
	GB28181SDK_API int C_UnInitSDK(void);

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

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

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

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

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

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

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

	//历史视频控制
	GB28181SDK_API int C_HisVideoCtrl(long hishandle, int ctrltype, long ctrlparam);

	//查询设备信息
	GB28181SDK_API const char *C_QueryDevInfo(char *pubid, int type);
#ifdef __cplusplus
}
#endif
#include "stdafx.h"
#include "GB28181SDK.h"


#pragma comment(lib, "videosdkjni.lib")

//-----------------------------------------------------------
//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		//点播跳转控制


#define QUERY_DEVICE_STATUS		0		//设备状态查询
#define QUERY_DEVICE_INFO		1		//设备信息查询

typedef enum
{
	EVENT_REGISTER_STATUS	= 1,	//注册回调
	EVENT_DEVICE_CATALOG	= 2,	//设备目录
	EVENT_DEVICE_ALARM		= 3,	//设备报警
	EVENT_HISVIDEO_STOP_NOTIFY		= 4,	//历史视频结束通知
	EVENT_RECORD_QUERY_NOTIFY		= 5,	//录像查询回调
}EventCallBackType_E;

//-------------------------------------------------------------

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 == EVENT_DEVICE_CATALOG)
	{
		bGetLoaclRes = true;
	}
	else if (eventtype == EVENT_REGISTER_STATUS && eventparam == 1)
	{
		C_GetResource(NULL);
	}
	else if (eventtype == EVENT_RECORD_QUERY_NOTIFY)
	{
		printf("query record info:%s\n", data);
	}
}
long userdata1 = 1234;
long userdata2 = 10002;
long userdata3 = 10003;
long userdata10 = 10010;
//打印码流回调信息
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);
	if (userdata == userdata1)
	{
		static FILE* fp11 = NULL;
		if (!fp11)
		{
			printf("fp11 handle:%ld, datatype:%d, datalen:%d, userdata:%ld\n", handle, datatype, datalen, userdata);
			fp11= fopen("userdata1.mpg", "wb+");
		}
		fwrite(data, sizeof(char), datalen, fp11);
	}
	else if (userdata == userdata2)
	{
		static FILE* fp22 = NULL;
		if (!fp22)
		{
			printf("fp22 handle:%ld, datatype:%d, datalen:%d, userdata:%ld\n", handle, datatype, datalen, userdata);
			fp22 = fopen("userdata2.mpg", "wb+");
		}
		fwrite(data, sizeof(char), datalen, fp22);
	}
	else if (userdata == userdata3)
	{
		static FILE* fp33 = NULL;
		if (!fp33)
		{
			printf("fp33 handle:%ld, datatype:%d, datalen:%d, userdata:%ld\n", handle, datatype, datalen, userdata);
			fp33 = fopen("userdata3.mpg", "wb+");
		}
		fwrite(data, sizeof(char), datalen, fp33);
	}
	else if (userdata == userdata10)
	{
		static FILE* fp110 = NULL;
		if (!fp110)
		{
			printf("fp110 handle:%ld, datatype:%d, datalen:%d, userdata:%ld\n", handle, datatype, datalen, userdata);
			fp110 = fopen("userdata10.mpg", "wb+");
		}
		fwrite(data, sizeof(char), datalen, fp110);
	}
}

void Test_PTZ(char *chanpubid, int sleeptime)
{
	//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 1, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 2, 0);

	Sleep(sleeptime);
	//PTZ控制 PTZ_OPT_DOWN
	C_Ptz(chanpubid, 3, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 4, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 5, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 6, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 7, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 8, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 9, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 10, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 11, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 12, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 13, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 14, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 15, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 16, 0);
	Sleep(sleeptime);
		//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 17, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 18, 0);
	Sleep(sleeptime);
			//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 19, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 20, 0);
	Sleep(sleeptime);
	//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 21, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 22, 0);
	Sleep(sleeptime);
	//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 23, 100);
	Sleep(1);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 24, 0);
	Sleep(sleeptime);
	//PTZ控制 PTZ_OPT_UP
	C_Ptz(chanpubid, 25, 100);
	Sleep(sleeptime);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 27, 100);
	Sleep(sleeptime);
	//PTZ控制结束PTZ_OPT_UP_STOP
	C_Ptz(chanpubid, 26, 100);
	Sleep(sleeptime);	
}

运行示例:
在这里插入图片描述

我将工程和大家共享,希望能够帮助到正在这个节骨眼上卡住的小伙伴们,时间就是金钱,时间就是生命,给大家节省时间,大家可以学习的更多,接触的更多,大家的进步,是我最大的幸福,欢迎小伙伴们多多交流,多给宝贵意见,很感谢各位能在百忙之中阅读我的文章。
源码地址:https://download.csdn.net/download/hnjzfwy/76542944

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值