/// <summary> /// 抓图 /// </summary> /// <param name="CH">通道</param> /// <param name="Quality">质量</param> /// <param name="Size"> /// 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA /// IPCAM专用{3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA(640x480) , 7=XVGA, 8=HD900p /// </param> /// <returns></returns> public Image CaptureJPG(int CH, ushort Quality = 2, ushort Size = 0xff) { bool res = false; NET_DVR_JPEGPARA jpeginfo; jpeginfo.wPicQuality = Quality; jpeginfo.wPicSize = Size; byte[] data = new byte[this.BufferSize]; uint ret = 0; if (Environment.Is64BitProcess) { res = HCNetSDKia64.NET_DVR_CaptureJPEGPicture_NEW(this.lUserID, CH, ref jpeginfo, data, (uint)data.Length, out ret); } else { res = HCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(this.lUserID, CH, jpeginfo, data, (uint)data.Length, out ret); } if (!res) { Error(); } MemoryStream ms = new MemoryStream(data); Image image = System.Drawing.Image.FromStream(ms); ms.Close(); ms.Dispose(); ms = null; System.GC.Collect(); return(image); }
public bool Connect(string DVRIPAddress, ushort DVRPortNumber, string DVRUserName, string DVRPassword) { NET_DVR_DEVICEINFO_V30 lpDeviceInfo; if (Environment.Is64BitProcess) { lUserID = HCNetSDKia64.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, out lpDeviceInfo); } else { lUserID = HCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, out lpDeviceInfo); } if (lUserID == -1) { Error(); } if (lpDeviceInfo.byIPChanNum > 0) { this.Mode = DevType.NVR; } else { this.Mode = DevType.IPC; Channel = lpDeviceInfo.byChanNum; } return(true); }
//转发音频数据 public bool SendVoiceData(string fileName) { try { IntPtr pUser = new IntPtr(88); if (_voice_handle > 0) { StopTalk(); } //if (_call_back == null) _call_back = new HCNetSDK.VoiceDataCallBack(OnVoiceData); _voice_handle = HCNetSDK.NET_DVR_StartVoiceCom_MR_V30(_user_id, VIOCE_CHANNEL, _call_back, pUser); if (!File.Exists(fileName)) { return(false); } _wav_thread = new Thread(new ParameterizedThreadStart(SendWavFile)); _wav_thread.Start(fileName); return(true); } catch (Exception ex) { WriteLog("转发音频数据失败:" + ex.Message); return(false); } }
public bool Open() { try { int ret = -1; if (!HCNetSDK.NET_DVR_Init()) { return(false); } _user_id = HCNetSDK.NET_DVR_Login_V30(_ip, _port, _user_name, _password, out deviceInfo); if (_user_id < 0) { return(false); } _dec_handle = HCNetSDK.NET_DVR_InitG722Encoder(); // 增加消息处理时间 if (MessageReceived != null) { IntPtr pUser = new IntPtr(); bool bRet = HCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(MessageReceived, pUser); _alarm_handle = HCNetSDK.NET_DVR_SetupAlarmChan_V30(_user_id); } return(true); } catch (Exception ex) { WriteLog("硬盘录像机打开失败:" + ex.Message); return(false); } }
public bool Close() { try { //if (_call_back != null) //{ // _call_back = null; //} // 关闭音频 CloseSound(); // 视频 StopAllRealPlay(); // 释放音频解码 HCNetSDK.NET_DVR_ReleaseG722Encoder(_dec_handle); // 关闭警告 if (_alarm_handle > 0) { HCNetSDK.NET_DVR_CloseAlarmChan_V30(_alarm_handle); } if (!HCNetSDK.NET_DVR_Logout(_user_id)) { return(false); } if (!HCNetSDK.NET_DVR_Cleanup()) { return(false); } return(true); } catch (Exception ex) { WriteLog("硬盘录像机关闭失败:" + ex.Message); return(false); } }
public bool GetWavInfo(string strpath) { WavInfo wavInfo = new WavInfo(); FileInfo fi = new FileInfo(strpath); FileStream fs = fi.OpenRead(); if (fs.Length >= 44) { byte[] bInfo = new byte[44]; fs.Read(bInfo, 0, 44); wavInfo.groupid = Encoding.Default.GetString(bInfo, 0, 4); wavInfo.filesize = BitConverter.ToInt32(bInfo, 4); wavInfo.rifftype = Encoding.Default.GetString(bInfo, 8, 4); wavInfo.chunkid = Encoding.Default.GetString(bInfo, 12, 4); if (wavInfo.groupid == "RIFF" && wavInfo.rifftype == "WAVE" && wavInfo.chunkid == "fmt ") { wavInfo.chunksize = BitConverter.ToInt32(bInfo, 16); wavInfo.wformattag = BitConverter.ToInt16(bInfo, 20); wavInfo.wchannels = BitConverter.ToUInt16(bInfo, 22); wavInfo.dwsamplespersec = BitConverter.ToUInt32(bInfo, 24); wavInfo.dwavgbytespersec = BitConverter.ToUInt32(bInfo, 28); wavInfo.wblockalign = BitConverter.ToUInt16(bInfo, 32); wavInfo.wbitspersample = BitConverter.ToUInt16(bInfo, 34); wavInfo.datachunkid = Encoding.Default.GetString(bInfo, 36, 4); wavInfo.datasize = BitConverter.ToInt32(bInfo, 40); // 读取音频数据 int readBytes = 44, bufBytes = 0, buffSize = 0; int dataSize = (int)wavInfo.datasize; byte[] fileBuf = new byte[G722_WAVE_FRAME_SIZE]; _wav_buffer = new sbyte[G722_WAVE_FRAME_SIZE]; _dec_buffer = new sbyte[G722_VOICE_FRAME_SIZE]; //fs.Read(_buffer, 44, wavInfo.datasize); while (readBytes < dataSize) { bufBytes = dataSize - readBytes; if (bufBytes > G722_WAVE_FRAME_SIZE) { bufBytes = G722_WAVE_FRAME_SIZE; } buffSize = fs.Read(fileBuf, 0, bufBytes); for (int i = 0; i < bufBytes; i++) { if (fileBuf[i] > 127) { _wav_buffer[i] = (sbyte)(fileBuf[i] - 256); } else { _wav_buffer[i] = (sbyte)fileBuf[i]; } } HCNetSDK.NET_DVR_EncodeG722Frame(_dec_handle, _wav_buffer, _dec_buffer); readBytes += buffSize; } return(true); } } return(false); }
// 关闭声音采集 public bool SDK_CloseSound() { bool ret = false; HCNetSDK.NET_DVR_CloseSound(); return(ret); }
protected bool SDK_Cleanup() { bool ret = false; ret = HCNetSDK.NET_DVR_Cleanup(); return(ret); }
// 设置网络 public bool SetConnectTime(uint waitTime, uint tryTimes) { bool ret = false; ret = HCNetSDK.NET_DVR_SetConnectTime(waitTime, tryTimes); return(ret); }
// 云台控制 public bool PTZControl(int channel, PtzCommand command, PtzStop stop, PtzSpeed speed) { return(HCNetSDK.NET_DVR_PTZControlWithSpeed(_real_handles[channel - 1] , (uint)command , (uint)stop , (uint)speed)); }
// 抓图 public bool CapturePicture(uint channel, string fileName) { HCNetSDK.NET_DVR_JPEGPARA jpegPara = new HCNetSDK.NET_DVR_JPEGPARA(); jpegPara.wPicQuality = 0; jpegPara.wPicSize = 0; return(HCNetSDK.NET_DVR_CaptureJPEGPicture(_user_id, (int)channel, ref jpegPara, fileName)); }
public bool SDK_Logout() { bool ret = false; ret = HCNetSDK.NET_DVR_Logout(_user_id); return(ret); }
// 结束查找文件 private bool FindClose() { bool ret = HCNetSDK.NET_DVR_FindClose_V30(_find_handle); _find_handle = -1; return(ret); }
public bool SDK_SetVolume(ushort vol) { bool ret = false; //???? ret = HCNetSDK.NET_DVR_Volume(_user_id, vol); return(ret); }
// 默认取第一个通道 public bool OpenSound() { bool ret = false; ret = HCNetSDK.NET_DVR_OpenSound(_real_handles[0]); ret = HCNetSDK.NET_DVR_Volume(_real_handles[0], 65535);// 设置最大声音 return(ret); }
// 采集声音 public bool SDK_OpenSound(int lRealHandle) { bool ret = false; ret = HCNetSDK.NET_DVR_OpenSound(lRealHandle); HCNetSDK.NET_DVR_Volume(lRealHandle, 65535);// 设置最大声音 return(ret); }
public bool Close() { HCNetSDK.NET_DVR_ReleaseG722Encoder(_dec_handle); if (!SDK_Logout()) { return(false); } return(SDK_Cleanup()); }
//视频控制 public int SDK_RealPlay(int lChannel, int lLinkMode, IntPtr hPlayWnd) { lpClientInfo = new NET_DVR_CLIENTINFO(); lpClientInfo.lChannel = lChannel; lpClientInfo.lLinkMode = lLinkMode; lpClientInfo.hPlayWnd = hPlayWnd; _real_handles[lChannel - 1] = HCNetSDK.NET_DVR_RealPlay_V30(_user_id, ref lpClientInfo, null, 1, false); return(_real_handles[lChannel - 1]); }
//-----------------------------新API------------------------------- #region <DVR 函数> // 登录DVR系统 public bool Login() { _user_id = HCNetSDK.NET_DVR_Login_V30(_ip, _port, _user_name, _password, out deviceInfo); if (_user_id < 0) { return(false); } return(true); }
public bool SDK_StopRealPlay(int lRealHandle) { bool ret = false; ret = HCNetSDK.NET_DVR_StopRealPlay(lRealHandle); // add HCNetSDK.NET_DVR_SetAudioMode(1); return(ret); }
/// <summary> /// 按文件名回放录像文件 /// </summary> /// <param name="fileName"> 回放的文件名,长度不能超过100字节</param> /// <param name="hWnd">窗口句柄</param> /// <returns></returns> public bool PlayBackByName(string fileName, IntPtr hWnd) { _play_handle = HCNetSDK.NET_DVR_PlayBackByName(_user_id, fileName, hWnd); if (_play_handle < 0) { return(false); } return(true); }
public void SendWavFile(object strpath) { WavInfo wavInfo = new WavInfo(); FileInfo fi = new FileInfo((string)strpath); FileStream fs = fi.OpenRead(); bool ret = false; if (fs.Length >= 44) { byte[] bInfo = new byte[44]; fs.Read(bInfo, 0, 44); wavInfo.groupid = Encoding.Default.GetString(bInfo, 0, 4); wavInfo.filesize = BitConverter.ToInt32(bInfo, 4); wavInfo.rifftype = Encoding.Default.GetString(bInfo, 8, 4); wavInfo.chunkid = Encoding.Default.GetString(bInfo, 12, 4); if (wavInfo.groupid == "RIFF" && wavInfo.rifftype == "WAVE" && wavInfo.chunkid == "fmt ") { wavInfo.chunksize = BitConverter.ToInt32(bInfo, 16); wavInfo.wformattag = BitConverter.ToInt16(bInfo, 20); wavInfo.wchannels = BitConverter.ToUInt16(bInfo, 22); wavInfo.dwsamplespersec = BitConverter.ToUInt32(bInfo, 24); wavInfo.dwavgbytespersec = BitConverter.ToUInt32(bInfo, 28); wavInfo.wblockalign = BitConverter.ToUInt16(bInfo, 32); wavInfo.wbitspersample = BitConverter.ToUInt16(bInfo, 34); wavInfo.datachunkid = Encoding.Default.GetString(bInfo, 36, 4); wavInfo.datasize = BitConverter.ToInt32(bInfo, 40); // 读取音频数据 int readBytes = 0, bufBytes = 0, buffSize = 0; int dataSize = (int)wavInfo.datasize; byte[] fileBuf = new byte[G722_WAVE_FRAME_SIZE]; byte[] _wav_buffer = new byte[G722_WAVE_FRAME_SIZE]; byte[] _dec_buffer = new byte[G722_VOICE_FRAME_SIZE]; //fs.Read(_buffer, 44, wavInfo.datasize); while (readBytes < dataSize) { bufBytes = dataSize - readBytes; if (bufBytes > G722_WAVE_FRAME_SIZE) { bufBytes = G722_WAVE_FRAME_SIZE; } buffSize = fs.Read(fileBuf, 0, bufBytes); if (buffSize == 0) { break; } ret = HCNetSDK.NET_DVR_EncodeG722Frame(_dec_handle, fileBuf, _dec_buffer); ret = HCNetSDK.NET_DVR_VoiceComSendData(_voice_handle, _dec_buffer, G722_VOICE_FRAME_SIZE); readBytes += buffSize; Thread.Sleep(40); } StopTalk(); //return true; } } // return false; }
// 初始化设备SDK public int SDK_Init() { bool ret = HCNetSDK.NET_DVR_Init(); if (!ret) { return(-1); } return(0); }
// 释放SDK protected int SDK_Cleanup() { bool ret = HCNetSDK.NET_DVR_Cleanup(); if (!ret) { return(-1); } return(0); }
/// <summary> /// 按键 /// </summary> /// <param name="Key"> /// 1-按钮1; 2-按钮2……9-按钮9;10-按钮0, /// 11-POWER 12-MENU 13-ENTER 14-"ESC" /// 15-"上"或者"云台上开始" 16-"下"或者"云台下开始" /// 17-"左"或者"云台左开始" 18-"右"或者"云台右开始" /// 19-"EDIT"或者"光圈+开始" 22-"PLAY" /// 23-"REC" 24-"PAN"或者"光圈-开始" /// 25-"多画面"或者"聚焦-开始" 26-"输入法"或者"聚焦+开始" /// 27-"对讲" 28-"系统信息" 29-"快进" 30-"快退" /// 32-"云台上结束" 33-"云台下结束" 34-"云台左结束" /// 35-"云台右结束" 36-"光圈+结束" 37-"光圈-结束" /// 38-"聚焦+结束" 39-"聚焦-结束" 40-"变倍+开始" /// 41-"变倍+结束" 42-"变倍-开始" 43-"变倍-结束" /// 44-按钮11 45-按钮12 46-按钮13 /// 47-按钮14 48-按钮15 49-按钮16 /// </param> /// <returns></returns> public bool Panel(int Key) { if (Environment.Is64BitProcess) { return(HCNetSDKia64.NET_DVR_ClickKey(this.lUserID, Key)); } else { return(HCNetSDK.NET_DVR_ClickKey(this.lUserID, Key)); } }
public bool SDK_StopTalk() { bool ret = false; if (_talk_handle > -1) { ret = HCNetSDK.NET_DVR_StopVoiceCom(_talk_handle); } _talk_handle = -1; return(ret); }
/// <summary> /// 恢复设备本地面板控制 /// </summary> public void UnLockPanel() { if (Environment.Is64BitProcess) { HCNetSDKia64.NET_DVR_UnLockPanel(this.lUserID); } else { HCNetSDK.NET_DVR_UnLockPanel(this.lUserID); } }
// 登出DVR系统 public int SDK_Logout() { bool ret = false; ret = HCNetSDK.NET_DVR_Logout(_user_id); if (!ret) { return(-1); } return(0); }
// 关闭视频 public int SDK_StopRealPlay(int lRealHandle) { bool ret = false; ret = HCNetSDK.NET_DVR_StopRealPlay(lRealHandle); if (!ret) { return(-1); } return(0); }
// 设置音量 public int SDK_SetVolume(ushort vol) { bool ret = false; //???? ret = HCNetSDK.NET_DVR_Volume(_user_id, vol); if (!ret) { return(-1); } return(0); }