pans
2016-12-15 87e3ee273b2f84081ac45926be9d8e5be3166eaa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
//#include "Windows.h"
#include "HCNetSDK.h"
#include <time.h>
 
using namespace std;
#define XML_BUF 3*1024*1024
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser) {
    char tempbuf[256] = {0};
    switch(dwType) {
    case EXCEPTION_RECONNECT:
// 预览时重连
        printf("----------reconnect--------%d\n", time(NULL));
        break;
    default:
        break;
    }
}
int main() {
    DWORD dwRet;
    
    NET_DVR_Init();
    NET_DVR_SetConnectTime(2000, 1);
    NET_DVR_SetReconnect(10000, true);
    NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);
 
    LONG lUserID;
 
    NET_DVR_DEVICEINFO_V30 struDeviceInfo;
    lUserID = NET_DVR_Login_V30("192.168.1.101", 8000, "admin", "a1234567", &struDeviceInfo);
    if (lUserID < 0) {
        printf("NET_DVR_Login_V30 failed, err: %d\n", NET_DVR_GetLastError());
        NET_DVR_Cleanup();
        return -1;
    }
 
    //DWORD dwWallNo = 1 << 24;
    //
    ////---------------------------------------
    //// 获取电视墙显示输出位置,获取4个屏幕信息
    //DWORD m_dwDispNum=4;
    //DWORD m_lDispChan[4]; //显示输出号,通过NET_DVR_GET_VIDEOWALLDISPLAYNO获取
    //m_lDispChan[0]= 0x01000001;
    //m_lDispChan[1]= 0x01000002;
    //m_lDispChan[2]= 0x01000003;
    //m_lDispChan[3]= 0x01000004;
    //DWORD m_dwStatus[4];
    //NET_DVR_VIDEOWALLDISPLAYPOSITION m_struWallDispPos[4];
    //memset(m_dwStatus, 0, sizeof(m_dwStatus));
    //memset(m_struWallDispPos, 0, sizeof(m_struWallDispPos));
    //if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLDISPLAYPOSITION, m_dwDispNum, m_lDispChan, sizeof(DWORD) * m_dwDispNum, 
    //    m_dwStatus, m_struWallDispPos, m_dwDispNum* sizeof(NET_DVR_VIDEOWALLDISPLAYPOSITION))) {
    //    printf("NET_DVR_GET_VIDEOWALLDISPLAYPOSITION failed, err: %d\n", NET_DVR_GetLastError());
    //}
    //
    ////---------------------------------------
    ////设置电视墙显示输出位置, 设置4个显示屏幕在电视墙上的位置
    //m_struWallDispPos[0].byEnable=1;
    //m_struWallDispPos[0].dwVideoWallNo= dwWallNo;
    //m_struWallDispPos[0].struRectCfg.dwXCoordinate=0;
    //m_struWallDispPos[0].struRectCfg.dwYCoordinate=0;
    //
    //m_struWallDispPos[1].byEnable=1;
    //m_struWallDispPos[1].dwVideoWallNo= dwWallNo;
    //m_struWallDispPos[1].struRectCfg.dwXCoordinate=1920;
    //m_struWallDispPos[1].struRectCfg.dwYCoordinate=0;
    //
    //m_struWallDispPos[2].byEnable=1;
    //m_struWallDispPos[2].dwVideoWallNo= dwWallNo;
    //m_struWallDispPos[2].struRectCfg.dwXCoordinate=0;
    //m_struWallDispPos[2].struRectCfg.dwYCoordinate=1080;
    //
    //m_struWallDispPos[3].byEnable=1;
    //m_struWallDispPos[3].dwVideoWallNo= dwWallNo;
    //m_struWallDispPos[3].struRectCfg.dwXCoordinate=1920;
    //m_struWallDispPos[3].struRectCfg.dwYCoordinate=1080;
    //
    //if (!NET_DVR_SetDeviceConfig(lUserID, NET_DVR_SET_VIDEOWALLDISPLAYPOSITION, m_dwDispNum, m_lDispChan,sizeof(DWORD) * m_dwDispNum, 
    //    m_dwStatus, m_struWallDispPos, m_dwDispNum* sizeof(NET_DVR_VIDEOWALLDISPLAYPOSITION))) {
    //    printf("NET_DVR_SET_VIDEOWALLDISPLAYPOSITION failed, err: %d\n", NET_DVR_GetLastError());
    //}
 
    
    
    //---------------------------------------
    //获取电视墙窗口参数
        //DWORD m_dwWinCount;
    //窗口个数
        //char *pTemp = new char[4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION)];
        //memset(pTemp, 0, 4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION));
    //获取电视墙所有窗口信息,只需传电视墙号
        //if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLWINDOWPOSITION, 0xffffffff, &dwWallNo, sizeof(DWORD), NULL, 
        //    pTemp, 4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION))) {
        //    printf("NET_DVR_GET_VIDEOWALLWINDOWPOSITION error, err: %d\n", NET_DVR_GetLastError());
        //}
        //m_dwWinCount = *((DWORD*)pTemp);
        //printf("m_dwWinCount=%d\n", m_dwWinCount);
        
    //返回的前4个字节为窗口个数delete []pTemp;
 
 
    //---------------------------------------
    //设置电视墙窗口参数,即开窗,坐标在电视墙范围之内
    DWORD m_dwWinCount=1;
    //开两个窗口
    DWORD m_dwWinNum[1];
    //1字节墙号+ 1字节保留+ 2字节窗口号m_dwWinNum[0] = 1<<24;
    //开窗时窗口号为0
    m_dwWinNum[0] = 1<<24;
 
    
    NET_DVR_VIDEOWALLWINDOWPOSITION m_struWinPos[1];
    memset(m_struWinPos, 0, sizeof(m_struWinPos));
 
    m_struWinPos[0].dwSize=sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION);
    m_struWinPos[0].byEnable=1;
    m_struWinPos[0].struRect.dwXCoordinate=100;
    m_struWinPos[0].struRect.dwYCoordinate=100;
    m_struWinPos[0].struRect.dwWidth=1720;
    m_struWinPos[0].struRect.dwHeight=1720;
    
    //m_struWinPos[1].dwSize=sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION);
    //m_struWinPos[1].byEnable=1;
    //m_struWinPos[1].struRect.dwXCoordinate=1920;
    //m_struWinPos[1].struRect.dwYCoordinate=1920;
    //m_struWinPos[1].struRect.dwWidth=800;
    //m_struWinPos[1].struRect.dwHeight=600;
 
    
    
 
    DWORD m_dwWinStatus[1];
    DWORD dwRetWinNum[1];
    //开窗时窗口号由设备返回
    
    NET_DVR_IN_PARAM struInputPapam = {0};
    struInputPapam.struCondBuf.pBuf = &m_dwWinNum;
    //输入条件缓冲区
    struInputPapam.struCondBuf.nLen = m_dwWinCount * sizeof(DWORD);
    struInputPapam.dwRecvTimeout = 5000;
    //接收超时时间
    struInputPapam.struInParamBuf.pBuf = m_struWinPos;
    struInputPapam.struInParamBuf.nLen = m_dwWinCount * sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION);
    
    NET_DVR_OUT_PARAM struOutputPapam = {0};
    struOutputPapam.lpStatusList = m_dwWinStatus;
    struOutputPapam.struOutBuf.pBuf = dwRetWinNum;
    struOutputPapam.struOutBuf.nLen = m_dwWinCount*sizeof(DWORD);
    
    if (!NET_DVR_SetDeviceConfigEx(lUserID, NET_DVR_SET_VIDEOWALLWINDOWPOSITION, m_dwWinCount, &struInputPapam, &struOutputPapam)) {
        printf("NET_DVR_SET_VIDEOWALLWINDOWPOSITION error, err: %d\n", NET_DVR_GetLastError());
    }
    
    
    
    //前端设备 动态解码
    NET_DVR_PU_STREAM_CFG_V41 m_struDynamicInfo= {0};
    m_struDynamicInfo.dwSize=sizeof(m_struDynamicInfo);
    m_struDynamicInfo.byStreamMode=1;
    strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byAddress, "192.168.1.63");
    m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.wDVRPort=8000;
    strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.sUserName,"admin");
    strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.sPassword,"admin12345");
    m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byChannel=1;
    m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byFactoryType=0;
    
    //int byWallNo=1,dwSubWinNo=1,dwWinNo=1;
    
    DWORD dwDecChanNum=0x01000002;
    //DWORD dwDecChanNum=(byWallNo << 24) | (dwSubWinNo<<16) |dwWinNo;
    //1字节墙号+1字节子窗口号+2字节窗口号: (byWallNo << 24) | (dwSubWinNo<<16) |dwWinNo;
    if (!NET_DVR_MatrixStartDynamic_V41(lUserID, dwDecChanNum, &m_struDynamicInfo)) {
        printf("NET_DVR_MatrixStartDynamic_V41 error, err: %d\n", NET_DVR_GetLastError());
    }
    
    /*char logobuf[50000];
    NET_DVR_GetDeviceAbility(lUserID,WALL_ABILITY,NULL,0,logobuf,50000);
    FILE * pFile;
        pFile = fopen ("./a.xml","w");
        printf("----test open----\n");
        if (pFile!=NULL)
        {
            printf("----test----%d\n",sizeof(pFile));
            fwrite(logobuf, 1, sizeof(logobuf), pFile);
            
            fclose (pFile);
        }
        else
            perror ("Error opening file");
    */
 
    //报警时间段
    NET_DVR_SCHEDTIME net_dvr_schedtime;
    net_dvr_schedtime.byStartHour = 0;
    net_dvr_schedtime. byStartMin = 1;
    net_dvr_schedtime.byStopHour = 11;
    net_dvr_schedtime.byStopMin = 59;
    
    //报警设置信息
    NET_DVR_ALARMOUTCFG_V30 net_dvr_alarmoutcfg;
    net_dvr_alarmoutcfg.dwSize = ;
    net_dvr_alarmoutcfg.sAlarmOutName = "test";
    net_dvr_alarmoutcfg.dwAlarmOutDelay = 0;
    net_dvr_alarmoutcfg.struAlarmOutTime= ;
    net_dvr_alarmoutcfg.byRes[16] = 0;
    //开启警报
    NET_DVR_SetAlarmOut(lUserID,0xff00,1);
    
 
    NET_DVR_DISP_LOGOCFG net_dvr_disp_logocfg1;
    net_dvr_disp_logocfg1.dwCorordinateX = 10;
    net_dvr_disp_logocfg1.dwCorordinateY = 10;
    net_dvr_disp_logocfg1.wPicWidth = 32;
    net_dvr_disp_logocfg1.wPicHeight = 32;
    net_dvr_disp_logocfg1.byRes1[4]=0;
    net_dvr_disp_logocfg1.byFlash = 1;
    net_dvr_disp_logocfg1.byTranslucent = 0;
    net_dvr_disp_logocfg1.byRes2[6]=0;
    net_dvr_disp_logocfg1.dwLogoSize=0;
 
    
    
    
    char logobuf[10000];
    {        
        FILE * pFile;
        pFile = fopen ("./ico.bmp","rb");
        fseek(pFile,0,SEEK_END);
        int nFileLen = ftell(pFile);
        fseek(pFile,0,SEEK_SET);
        
        printf("----test open----,%d\n",nFileLen);
        if (pFile!=NULL)
        {
            printf("----test----\n");
            net_dvr_disp_logocfg1.dwLogoSize = fread(logobuf, 1, nFileLen, pFile);
            fclose (pFile);
        }
        else
            perror ("Error opening file");
    }
    
    if (!NET_DVR_UploadLogo(lUserID, 1, &net_dvr_disp_logocfg1, logobuf)) {
        printf("NET_DVR_UploadLogo error, err: %d\n", NET_DVR_GetLastError());
    }
    
    if (!NET_DVR_LogoSwitch(lUserID, 1,  NET_DVR_SHOWLOGO)) {
        printf("NET_DVR_LogoSwitch error, err: %d\n", NET_DVR_GetLastError());
    }
    //if (!NET_DVR_MatrixStopDynamic(lUserID,dwDecChanNum)) {
    //    printf("NET_DVR_MatrixStopDynamic error, err: %d\n", NET_DVR_GetLastError());
    //}
    
//    NET_DVR_MatrixStopDynamic
//  NET_DVR_MatrixStopPassiveDecode
    //解除警报
    NET_DVR_SetAlarmOut(lUserID,0xff00,0);
    //注销用户
    NET_DVR_Logout(lUserID);
    //释放SDK资源
    NET_DVR_Cleanup();
    return 0;
}