ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

宇视IMOS 平台 SDK 开发记录探测视频数据demo

2022-02-25 09:32:04  阅读:328  来源: 互联网

标签:char demo argv IMOS 宇视 pstParseVideoData include 02X


没接触过宇视平台,刚开始百度了下宇视SDK后来发现网上搜到的都是NetDevSDK 这个

那IMOS又是啥,领导安排就说宇视平台 我以为是NetDevSDK这个,后来咨询了另一位同事才知道

IMOS是IMP8500 的一个类似于视频NVR管理平台,而NetDEvSDK 是针对IPC之类的终端设备的

和IMOS一点关系也没有

也没有文档 花了一天时间,参考原来的例子写了个探测是否有码流的小程序

执行方式:TestIMOS.exe 服务器IP 端口 用户名 密码 摄像机编号 码流编号

有视频的话会打印出视频的数据

 

代码如下:

// TestIMOS.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


#include "GeneralDef.h"

#include "imos_public.h"
#include "imos_errcode.h"
#include "imos_def.h"

#include "sdk_def.h"
#include "sdk_struct.h"
#include "sdk_func.h"

#include<windows.h>

LOGIN_INFO_S login_info;

VOID STDCALL GetPacketCB(IN const USER_LOGIN_ID_INFO_S *pstUserLoginIDInfo,
	IN const CHAR *pcChannelCode,
	IN const XP_PARSE_VIDEO_DATA_S *pstParseVideoData,
	IN LONG lUserParam,
	IN LONG lReserved)
{
	static int total = 0;

	//ulVideoCodeFormat 0:MPEG2,1:MPEG4,2:H264,MJPEG :3
	//ulVideoFrameType I:0,P:1,B:2
	total++;
	printf("size:%d WXH[%dX%d] frame[%d] format[%d],content[%02X %02X %02X %02X %02X %02X %02X %02X]\n", pstParseVideoData->ulDataLen, pstParseVideoData->ulWidth, pstParseVideoData->ulHeight, 
		pstParseVideoData->ulVideoFrameType,pstParseVideoData->ulVideoCodeFormat,
		pstParseVideoData->pucData[0], pstParseVideoData->pucData[1], pstParseVideoData->pucData[2], pstParseVideoData->pucData[3], 
		pstParseVideoData->pucData[4], pstParseVideoData->pucData[5], pstParseVideoData->pucData[6], pstParseVideoData->pucData[7]);

	if (total == 100)
	{
		printf("exit program\n");
		IMOS_LogoutEx(&login_info.stUserLoginIDInfo);
		IMOS_CleanUp(NULL);
		exit(1);
	}
	return;
}



int main(int argc, char*argv[])
{
	CHAR * dummy = (CHAR*)"N/A";

	char  m_userName[32] = {0};		//用户名
	char  m_passWord[64] = {0};		//密码
	char  m_proxyIp[64] = {0};
	char  m_deviceId[128] = {0};		//设备ID
	LONG  m_proxyPort = 8800;
	const char* name = "spsy";
	const char* pass = "gdkjspsy";
	const char* ip = "10.118.6.254";
	int port = 8800;

	CHAR szPasswd[IMOS_PASSWD_ENCRYPT_LEN] = { 0 };
	
	char stream_index = 0;//0:Main stream 1:substream,2:thrid stream

	char m_szXpCode[IMOS_RES_CODE_LEN];



	if (argc == 2)//cmd deviceid
	{
		memcpy(m_deviceId, argv[1], strlen(argv[1]));
	}
	else if (argc == 7) //cmd streamindex deviceid
	{
	
		memcpy(m_proxyIp, argv[1], strlen(argv[1]));
		port = atoi(argv[2]);
		memcpy(m_userName, argv[3], strlen(argv[3]));
		memcpy(m_passWord, argv[4], strlen(argv[4]));
		memcpy(m_deviceId, argv[5], strlen(argv[5]));
		stream_index = atoi(argv[6]);
	}
	else
	{
		printf("Execute like this imos:ip port username password deviceid streamindex\n");
		//return -1;
	}


	
	int   ret = IMOS_Initiate(m_proxyIp, port, BOOL_TRUE, BOOL_TRUE);
	if (ERR_COMMON_SUCCEED != ret)
	{
		std::cout << "Init failed" << std::endl;
		return -1;
	}
	else
	{
		std::cout << "Init Success :\n" << ret << std::endl;
	}


	ret = IMOS_Encrypt(m_passWord, strlen(m_passWord), szPasswd);
	if (ERR_COMMON_SUCCEED != ret)
	{
		printf("Encrypt failed\n");
		return -1;
	}
	else
	{
		printf("Encrypt success:[%s]\n",szPasswd);
	}
	ret  = IMOS_LoginEx(m_userName, szPasswd, m_proxyIp, dummy, &login_info);//IMOS_Login(szUserLoginName, szPasswd, szServerAdd, &g_stLoginInfo);

	if (ERR_COMMON_SUCCEED != ret)
	{
		printf("IMOS_LoginEx failed ret is %d ip[%s] port[%d] username[%s] pass[%s] deviceid[%s] streamindex[%d]\n", ret,m_proxyIp, port, m_userName, m_passWord,m_deviceId,stream_index);
		return -1;
	}

	
	PLAY_WND_INFO_S *pstPlayWndInfoList = (PLAY_WND_INFO_S*)malloc(DEMO_MAX_PLAYS * sizeof(PLAY_WND_INFO_S));
	if (NULL == pstPlayWndInfoList)
	{
		printf("No memory \n");
		return -1;
	}

	memset(pstPlayWndInfoList, 0, DEMO_MAX_PLAYS * sizeof(PLAY_WND_INFO_S));

	ret = IMOS_StartPlayer(&login_info.stUserLoginIDInfo, DEMO_MAX_PLAYS, pstPlayWndInfoList);
	if (ERR_COMMON_SUCCEED != ret)
	{
		free(pstPlayWndInfoList);
		printf("IMOS_StartPlayer failed \n");
		return -1;
	}
	free(pstPlayWndInfoList);
	IMOS_AutoKeepAlive(&login_info.stUserLoginIDInfo);

	ret = IMOS_GetChannelCode(&login_info.stUserLoginIDInfo, m_szXpCode);
	if (ERR_COMMON_SUCCEED != ret)
	{
		printf("IMOS_GetChannelCode failed ret is %d\n", ret);
		return -1;
	}

	printf("m_szXpCode = %s \n", m_szXpCode);



	ret = IMOS_SetParseVideoDataCB(&login_info.stUserLoginIDInfo, m_szXpCode,GetPacketCB,0,0);
	if (ERR_COMMON_SUCCEED != ret)
	{
		printf("IMOS_SetParseVideoDataCB failed ret is %d\n", ret);
		return -1;
	}


	DEV_STATUS_INFO_S status = {0};
	
	ret = IMOS_QueryDevStatus(&login_info.stUserLoginIDInfo,40,&status);


	printf("IMOS_QueryDevStatus ret is %d status[%d] code[%s],name[%s]\n", ret, status.ulDevType,status.szDevCode,status.szDevName);

	CAMERA_INFO_S cam_info = { 0 };
	//IMOS_QueryCameraAndChannelList(&login_info.stUserLoginIDInfo,);
	ret = IMOS_QueryCamera(&login_info.stUserLoginIDInfo, m_deviceId, &cam_info);
	printf("IMOS_QueryCamera ret is %d status[%d] code[%s],name[%s]\n", ret, cam_info.ulChannelIndex, cam_info.szCameraCode, cam_info.szCameraName);
	  
	ret = IMOS_StartMonitor(&login_info.stUserLoginIDInfo,m_deviceId,m_szXpCode, stream_index,USER_OPERATE_SERVICE);
	if (ERR_COMMON_SUCCEED != ret)
	{
		printf("IMOS_StartMonitor failed ret is %d\n", ret);

		IMOS_LogoutEx(&login_info.stUserLoginIDInfo);
		IMOS_CleanUp(NULL);

		return -1;

	}


	while (1)
	{
		//printf("Sleep index \n");
		Sleep(5);
	}

	return 0;
}




// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

标签:char,demo,argv,IMOS,宇视,pstParseVideoData,include,02X
来源: https://blog.csdn.net/baoecit/article/details/123125564

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有