private void IPChannelConfig_Load(object sender, EventArgs e) { int i; //获取设备支持IPC协议列表 if (ChcNetSdk.NET_DVR_GetIPCProtoList(MlUserId, ref _mStruProtoList)) { for (i = 0; i < (int)_mStruProtoList.dwProtoNum; i++) { comboBoxFactory.Items.Add(_mStruProtoList.struProto[i].byDescribe); } } comboBoxStreamType.SelectedIndex = 0; comboBoxFactory.SelectedIndex = 0; comboBoxStream.SelectedIndex = 0; comboBoxProtocol.SelectedIndex = 0; /*********************************************************** * 显示当前IP通道配置 * **********************************************************/ if (IpDevIndex < 0) { //该通道未添加有设备,空闲状态 return; } comboBoxStreamType.SelectedIndex = MStruIpParaCfgV40.struStreamMode[ChanIndex].byGetStreamType; //取流方式 textBoxIPAddr.Text = MStruIpParaCfgV40.struIPDevInfo[IpDevIndex].struIP.sIpV4; //前端设备IP地址 textBoxPort.Text = Convert.ToString(MStruIpParaCfgV40.struIPDevInfo[IpDevIndex].wDVRPort); //前端设备端口 textBoxUserName.Text = MStruIpParaCfgV40.struIPDevInfo[IpDevIndex].sUserName; //前端设备用户名 textBoxPsw.Text = MStruIpParaCfgV40.struIPDevInfo[IpDevIndex].sPassword; //前端设备密码 for (i = 0; i < (int)_mStruProtoList.dwProtoNum; i++) { //设备(厂家)协议类型,通过NET_DVR_GetIPCProtoList获取 if (_mStruProtoList.struProto[i].dwType == MStruIpParaCfgV40.struIPDevInfo[IpDevIndex].byProType) { comboBoxFactory.SelectedIndex = i; } } switch (MStruIpParaCfgV40.struStreamMode[ChanIndex].byGetStreamType) { case 0: //直接从设备取流,对应联合体中结构NET_DVR_IPCHANINFO var ptrChanInfo = Marshal.AllocHGlobal((int)DwUnionSize); Marshal.StructureToPtr(MStruIpParaCfgV40.struStreamMode[ChanIndex].uGetStream, ptrChanInfo, false); _mStruChanInfo = (ChcNetSdk.NetDvrIpchaninfo)Marshal.PtrToStructure(ptrChanInfo, typeof(ChcNetSdk.NetDvrIpchaninfo)); textBoxChannel.Text = Convert.ToString(_mStruChanInfo.byChannel); Marshal.FreeHGlobal(ptrChanInfo); break; case 6: //直接从设备取流(扩展),对应联合体中结构NET_DVR_IPCHANINFO_V40 var ptrChanInfoV40 = Marshal.AllocHGlobal((int)DwUnionSize); Marshal.StructureToPtr(MStruIpParaCfgV40.struStreamMode[ChanIndex].uGetStream, ptrChanInfoV40, false); _mStruChanInfoV40 = (ChcNetSdk.NetDvrIpchaninfoV40)Marshal.PtrToStructure(ptrChanInfoV40, typeof(ChcNetSdk.NetDvrIpchaninfoV40)); textBoxChannel.Text = Convert.ToString(_mStruChanInfoV40.dwChannel); comboBoxStream.SelectedIndex = _mStruChanInfoV40.byTransMode; comboBoxProtocol.SelectedIndex = _mStruChanInfoV40.byTransProtocol; Marshal.FreeHGlobal(ptrChanInfoV40); break; } }
public void InfoIpChannel() { var dwSize = (uint)Marshal.SizeOf(MStruIpParaCfgV40); var ptrIpParaCfgV40 = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(MStruIpParaCfgV40, ptrIpParaCfgV40, false); uint dwReturn = 0; var iGroupNo = 0; if (!ChcNetSdk.NET_DVR_GetDVRConfig(_mLUserId, ChcNetSdk.NetDvrGetIpparacfgV40, iGroupNo, ptrIpParaCfgV40, dwSize, ref dwReturn)) { _iLastErr = ChcNetSdk.NET_DVR_GetLastError(); _str = "NetDvrGetIpparacfgV40 failed, error code= " + _iLastErr; //获取IP资源配置信息失败,输出错误号 Failed to get configuration of IP channels and output the error code DebugInfo(_str); } else { DebugInfo("NetDvrGetIpparacfgV40 succ!"); MStruIpParaCfgV40 = (ChcNetSdk.NetDvrIpparacfgV40)Marshal.PtrToStructure(ptrIpParaCfgV40, typeof(ChcNetSdk.NetDvrIpparacfgV40)); for (_i = 0; _i < _dwAChanTotalNum; _i++) { ListAnalogChannel(_i + 1, MStruIpParaCfgV40.byAnalogChanEnable[_i]); _iChannelNum[_i] = _i + DeviceInfo.byStartChan; } for (_i = 0; _i < MStruIpParaCfgV40.dwDChanNum; _i++) { _iChannelNum[_i + _dwAChanTotalNum] = _i + (int)MStruIpParaCfgV40.dwStartDChan; var byStreamType = MStruIpParaCfgV40.struStreamMode[_i].byGetStreamType; dwSize = (uint)Marshal.SizeOf(MStruIpParaCfgV40.struStreamMode[_i].uGetStream); switch (byStreamType) { //目前NVR仅支持直接从设备取流 NVR supports only the mode: get stream from device directly case 0: var ptrChanInfo = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(MStruIpParaCfgV40.struStreamMode[_i].uGetStream, ptrChanInfo, false); MStruChanInfo = (ChcNetSdk.NetDvrIpchaninfo)Marshal.PtrToStructure(ptrChanInfo, typeof(ChcNetSdk.NetDvrIpchaninfo)); //列出IP通道 List the IP channel ListIpChannel(_i + 1, MStruChanInfo.byEnable, MStruChanInfo.byIPID); _iIpDevId[_i] = MStruChanInfo.byIPID + MStruChanInfo.byIPIDHigh * 256 - iGroupNo * 64 - 1; Marshal.FreeHGlobal(ptrChanInfo); break; case 6: var ptrChanInfoV40 = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(MStruIpParaCfgV40.struStreamMode[_i].uGetStream, ptrChanInfoV40, false); MStruChanInfoV40 = (ChcNetSdk.NetDvrIpchaninfoV40)Marshal.PtrToStructure(ptrChanInfoV40, typeof(ChcNetSdk.NetDvrIpchaninfoV40)); //列出IP通道 List the IP channel ListIpChannel(_i + 1, MStruChanInfoV40.byEnable, MStruChanInfoV40.wIPID); _iIpDevId[_i] = MStruChanInfoV40.wIPID - iGroupNo * 64 - 1; Marshal.FreeHGlobal(ptrChanInfoV40); break; } } } Marshal.FreeHGlobal(ptrIpParaCfgV40); }