大华解码器学习
//參數獲取
int deviceType; //設備類型
deviceType = atoi(argv[1]); //生產模式
//deviceType = 0; //開發模式,測試設備是大華。
int decodeChannelID; //對應解碼通道號
decodeChannelID = atoi(argv[2]);
//decodeChannelID = 17;
char cameraIP[64] = {0};
strcpy(cameraIP, argv[3]);
//strcpy(cameraIP, "172.20.51.215");
//cout << "攝像機IP:" << cameraIP << endl;
char cameraUsr[64] = {0};
strcpy(cameraUsr, argv[4]);
//strcpy(cameraUsr, "admin");
char cameraPwd[64] = {0};
strcpy(cameraPwd, argv[5]);
//strcpy(cameraPwd, "admin12345");
int tvID;
tvID = atoi(argv[6]);
//tvID = 1;
int splitNum;
splitNum = atoi(argv[7]);
//splitNum = 16;
//SDK初始化
CLIENT_Init(DisConnectFunc, 0);
//cout << "初始化SDK成功!" << endl;
//讀取解碼器設備配置信息
read_xml_config();
/*
定義解碼器配置:
*/
char szDevIp[64] = {0}; //解碼器IP
//strcpy(szDevIp ,"172.20.40.98"); //設置解碼器IP地址
strcpy(szDevIp ,configServerInfo.ip); //設置解碼器IP地址
//睡眠時間
int sleep_time=configServerInfo.sleep_time;
NET_DEVICEINFO stDevInfo = {0}; //設備信息
int nErrorCode = 0; //返回錯誤碼
LLONG lLoginHandle = 0; //登錄句柄
int nPort; //端口
//nPort = 37777;
nPort = configServerInfo.port;
int nChannelID = 0; // 通道號
//登錄解碼器
lLoginHandle = CLIENT_Login(szDevIp, nPort, configServerInfo.usr,
configServerInfo.pwd, &stDevInfo, &nErrorCode);
if (lLoginHandle != 0)
{
//設置異步回調函數
CLIENT_SetOperateCallBack(lLoginHandle, MessDataCallBackFunc, (LDWORD)0);
//查詢解碼器信息
DEV_DECODER_INFO stDecoderInfo = {0};
BOOL bRet = CLIENT_QueryDecoderInfo(lLoginHandle, &stDecoderInfo, 2000 /*超時時間*/);
if (bRet)
{
//cout << "查詢解碼器信息如下:" << endl;
//得到解碼器信息,包括TV個數,解碼通道個數,各個TV的畫面分割數,各個TV使能
//用于界面狀態顯示
//cout << "類型:" << stDecoderInfo.szDecType << endl;
//cout << "TV個數:" << stDecoderInfo.nMonitorNum << endl;
//cout << "解碼通道個數:" << stDecoderInfo.nEncoderNum << endl;
}
//使解碼器解碼前端設備的數據,以指定的分割畫面tv輸出。
int nDecoderID = decodeChannelID; //解碼器ID
DEV_ENCODER_INFO stuEncoderInfo = {0}; //編碼器信息
strcpy(stuEncoderInfo.szDevIpEx , cameraIP); //szDevIp擴展,前端DVR的IP地址(可以輸入域名)
strcpy(stuEncoderInfo.szDevUser , cameraUsr);
strcpy(stuEncoderInfo.szDevPwd , cameraPwd);
//stuEncoderInfo.wDevPort = 37777;
stuEncoderInfo.dwHttpPort = 80; //Http端口號,0-65535
stuEncoderInfo.byManuFactory = DH_IPC_ONVIF; //目標設備的生產廠商,0:Private(私有),1: AEBell(美電)
stuEncoderInfo.nDevChannel = 0; //通道 號
stuEncoderInfo.nStreamType = 0; //碼流類型,0:主碼流;1:子碼流
stuEncoderInfo.bDevChnEnable = 1; //解碼通道使能
/*
byConnType參數說明:
-1: auto
0:TCP
1:UDP
2:組播
*/
stuEncoderInfo.byConnType = 0; //TCP
/*
byWorkMode參數說明:
0:直連
1:轉發
*/
stuEncoderInfo.byWorkMode = 0; //直連
//對應解碼通道號,一號電視機,就是0-15,二號就是16-31,以此類推。
//要與上面的nDecoderID保持一致。
stuEncoderInfo.byDecoderID = decodeChannelID;
//由于CLIENT_SwitchDecTVEncoder接口為異步方式,
//因此要自定義一個操作參數 pSwitchTvParam,以便在異步回調函數處理界面的變化。
//控制解碼器TV畫面切換
LLONG lOperateHandle = CLIENT_SwitchDecTVEncoder(lLoginHandle,
nDecoderID,
&stuEncoderInfo,
0/*pSwitchTvParam用戶數據*/);
if (lOperateHandle == 0)
{
printf("Switch failed!, error = %d\n", CLIENT_GetLastError());
}
int nMonitorID = tvID; //TV的ID,電視機屏幕的編號,從0開始,四個就是0-3
int nSplitNum = splitNum; //一畫面 切割方式,1,4,9,16 中一值
BYTE bEncoderChannel[16] = {0}; //編碼器通道
switch (nSplitNum)
{
case 1:
//BYTE bEncoderChannel[4] = {0};
bEncoderChannel[0] = 0;//編碼器通道
break;
case 4:
//BYTE bEncoderChannel[4] = {0};
bEncoderChannel[0] = 0;//編碼器通道
bEncoderChannel[1] = 1; //編碼器通道
bEncoderChannel[2] = 2; //編碼器通道
bEncoderChannel[3] = 3; //編碼器通道
break;
case 9:
bEncoderChannel[0] = 0;//編碼器通道
bEncoderChannel[1] = 1; //編碼器通道
bEncoderChannel[2] = 2; //編碼器通道
bEncoderChannel[3] = 3; //編碼器通道
bEncoderChannel[4] = 5;//編碼器通道
bEncoderChannel[5] = 6; //編碼器通道
bEncoderChannel[6] = 7; //編碼器通道
bEncoderChannel[7] = 8; //編碼器通道
bEncoderChannel[8] = 9;//編碼器通道
case 16:
bEncoderChannel[0] = 0;//編碼器通道
bEncoderChannel[1] = 1; //編碼器通道
bEncoderChannel[2] = 2; //編碼器通道
bEncoderChannel[3] = 3; //編碼器通道
bEncoderChannel[4] = 4;//編碼器通道
bEncoderChannel[5] = 5; //編碼器通道
bEncoderChannel[6] = 6; //編碼器通道
bEncoderChannel[7] = 7; //編碼器通道
bEncoderChannel[8] = 8;//編碼器通道
bEncoderChannel[9] = 9;//編碼器通道
bEncoderChannel[10] = 10; //編碼器通道
bEncoderChannel[11] = 11; //編碼器通道
bEncoderChannel[12] = 12; //編碼器通道
bEncoderChannel[13] = 13;//編碼器通道
bEncoderChannel[14] = 14; //編碼器通道
bEncoderChannel[15] = 15; //編碼器通道
default:
break;
}
//由于CLIENT_CtrlDecTVScreen接口為異步方式,因此要自定義一個操作參數pCtrlTVParam,以便在異步回調函數處理界面的變化。
//控制解碼器TV畫面切割
lOperateHandle = CLIENT_CtrlDecTVScreen(lLoginHandle, nMonitorID, TRUE/*TV通道使能標志*/, nSplitNum, bEncoderChannel, nSplitNum/*pEncoderChannel的長度*/, 0/*pCtrlTVParam用戶數據*/);
if (lOperateHandle == 0)
{
printf("CLIENT_CtrlDecTVScreen failed!, error = %d\n", CLIENT_GetLastError());
}
}
Sleep(sleep_time);
//注銷用戶
CLIENT_Logout(lLoginHandle);
//釋放SDK資源
CLIENT_Cleanup();
int deviceType; //設備類型
deviceType = atoi(argv[1]); //生產模式
//deviceType = 0; //開發模式,測試設備是大華。
int decodeChannelID; //對應解碼通道號
decodeChannelID = atoi(argv[2]);
//decodeChannelID = 17;
char cameraIP[64] = {0};
strcpy(cameraIP, argv[3]);
//strcpy(cameraIP, "172.20.51.215");
//cout << "攝像機IP:" << cameraIP << endl;
char cameraUsr[64] = {0};
strcpy(cameraUsr, argv[4]);
//strcpy(cameraUsr, "admin");
char cameraPwd[64] = {0};
strcpy(cameraPwd, argv[5]);
//strcpy(cameraPwd, "admin12345");
int tvID;
tvID = atoi(argv[6]);
//tvID = 1;
int splitNum;
splitNum = atoi(argv[7]);
//splitNum = 16;
//SDK初始化
CLIENT_Init(DisConnectFunc, 0);
//cout << "初始化SDK成功!" << endl;
//讀取解碼器設備配置信息
read_xml_config();
/*
定義解碼器配置:
*/
char szDevIp[64] = {0}; //解碼器IP
//strcpy(szDevIp ,"172.20.40.98"); //設置解碼器IP地址
strcpy(szDevIp ,configServerInfo.ip); //設置解碼器IP地址
//睡眠時間
int sleep_time=configServerInfo.sleep_time;
NET_DEVICEINFO stDevInfo = {0}; //設備信息
int nErrorCode = 0; //返回錯誤碼
LLONG lLoginHandle = 0; //登錄句柄
int nPort; //端口
//nPort = 37777;
nPort = configServerInfo.port;
int nChannelID = 0; // 通道號
//登錄解碼器
lLoginHandle = CLIENT_Login(szDevIp, nPort, configServerInfo.usr,
configServerInfo.pwd, &stDevInfo, &nErrorCode);
if (lLoginHandle != 0)
{
//設置異步回調函數
CLIENT_SetOperateCallBack(lLoginHandle, MessDataCallBackFunc, (LDWORD)0);
//查詢解碼器信息
DEV_DECODER_INFO stDecoderInfo = {0};
BOOL bRet = CLIENT_QueryDecoderInfo(lLoginHandle, &stDecoderInfo, 2000 /*超時時間*/);
if (bRet)
{
//cout << "查詢解碼器信息如下:" << endl;
//得到解碼器信息,包括TV個數,解碼通道個數,各個TV的畫面分割數,各個TV使能
//用于界面狀態顯示
//cout << "類型:" << stDecoderInfo.szDecType << endl;
//cout << "TV個數:" << stDecoderInfo.nMonitorNum << endl;
//cout << "解碼通道個數:" << stDecoderInfo.nEncoderNum << endl;
}
//使解碼器解碼前端設備的數據,以指定的分割畫面tv輸出。
int nDecoderID = decodeChannelID; //解碼器ID
DEV_ENCODER_INFO stuEncoderInfo = {0}; //編碼器信息
strcpy(stuEncoderInfo.szDevIpEx , cameraIP); //szDevIp擴展,前端DVR的IP地址(可以輸入域名)
strcpy(stuEncoderInfo.szDevUser , cameraUsr);
strcpy(stuEncoderInfo.szDevPwd , cameraPwd);
//stuEncoderInfo.wDevPort = 37777;
stuEncoderInfo.dwHttpPort = 80; //Http端口號,0-65535
stuEncoderInfo.byManuFactory = DH_IPC_ONVIF; //目標設備的生產廠商,0:Private(私有),1: AEBell(美電)
stuEncoderInfo.nDevChannel = 0; //通道 號
stuEncoderInfo.nStreamType = 0; //碼流類型,0:主碼流;1:子碼流
stuEncoderInfo.bDevChnEnable = 1; //解碼通道使能
/*
byConnType參數說明:
-1: auto
0:TCP
1:UDP
2:組播
*/
stuEncoderInfo.byConnType = 0; //TCP
/*
byWorkMode參數說明:
0:直連
1:轉發
*/
stuEncoderInfo.byWorkMode = 0; //直連
//對應解碼通道號,一號電視機,就是0-15,二號就是16-31,以此類推。
//要與上面的nDecoderID保持一致。
stuEncoderInfo.byDecoderID = decodeChannelID;
//由于CLIENT_SwitchDecTVEncoder接口為異步方式,
//因此要自定義一個操作參數 pSwitchTvParam,以便在異步回調函數處理界面的變化。
//控制解碼器TV畫面切換
LLONG lOperateHandle = CLIENT_SwitchDecTVEncoder(lLoginHandle,
nDecoderID,
&stuEncoderInfo,
0/*pSwitchTvParam用戶數據*/);
if (lOperateHandle == 0)
{
printf("Switch failed!, error = %d\n", CLIENT_GetLastError());
}
int nMonitorID = tvID; //TV的ID,電視機屏幕的編號,從0開始,四個就是0-3
int nSplitNum = splitNum; //一畫面 切割方式,1,4,9,16 中一值
BYTE bEncoderChannel[16] = {0}; //編碼器通道
switch (nSplitNum)
{
case 1:
//BYTE bEncoderChannel[4] = {0};
bEncoderChannel[0] = 0;//編碼器通道
break;
case 4:
//BYTE bEncoderChannel[4] = {0};
bEncoderChannel[0] = 0;//編碼器通道
bEncoderChannel[1] = 1; //編碼器通道
bEncoderChannel[2] = 2; //編碼器通道
bEncoderChannel[3] = 3; //編碼器通道
break;
case 9:
bEncoderChannel[0] = 0;//編碼器通道
bEncoderChannel[1] = 1; //編碼器通道
bEncoderChannel[2] = 2; //編碼器通道
bEncoderChannel[3] = 3; //編碼器通道
bEncoderChannel[4] = 5;//編碼器通道
bEncoderChannel[5] = 6; //編碼器通道
bEncoderChannel[6] = 7; //編碼器通道
bEncoderChannel[7] = 8; //編碼器通道
bEncoderChannel[8] = 9;//編碼器通道
case 16:
bEncoderChannel[0] = 0;//編碼器通道
bEncoderChannel[1] = 1; //編碼器通道
bEncoderChannel[2] = 2; //編碼器通道
bEncoderChannel[3] = 3; //編碼器通道
bEncoderChannel[4] = 4;//編碼器通道
bEncoderChannel[5] = 5; //編碼器通道
bEncoderChannel[6] = 6; //編碼器通道
bEncoderChannel[7] = 7; //編碼器通道
bEncoderChannel[8] = 8;//編碼器通道
bEncoderChannel[9] = 9;//編碼器通道
bEncoderChannel[10] = 10; //編碼器通道
bEncoderChannel[11] = 11; //編碼器通道
bEncoderChannel[12] = 12; //編碼器通道
bEncoderChannel[13] = 13;//編碼器通道
bEncoderChannel[14] = 14; //編碼器通道
bEncoderChannel[15] = 15; //編碼器通道
default:
break;
}
//由于CLIENT_CtrlDecTVScreen接口為異步方式,因此要自定義一個操作參數pCtrlTVParam,以便在異步回調函數處理界面的變化。
//控制解碼器TV畫面切割
lOperateHandle = CLIENT_CtrlDecTVScreen(lLoginHandle, nMonitorID, TRUE/*TV通道使能標志*/, nSplitNum, bEncoderChannel, nSplitNum/*pEncoderChannel的長度*/, 0/*pCtrlTVParam用戶數據*/);
if (lOperateHandle == 0)
{
printf("CLIENT_CtrlDecTVScreen failed!, error = %d\n", CLIENT_GetLastError());
}
}
Sleep(sleep_time);
//注銷用戶
CLIENT_Logout(lLoginHandle);
//釋放SDK資源
CLIENT_Cleanup();
總結
- 上一篇: 带中文的网页下载为PDF格式的文件(js
- 下一篇: QCC300x笔记(3) -- QCC3