830 lines
27 KiB
C#
830 lines
27 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Data;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Threading;
|
|||
|
|
using System.Drawing.Imaging;
|
|||
|
|
|
|||
|
|
namespace Nanji_Island
|
|||
|
|
{
|
|||
|
|
public partial class UIControl_HBGK : UserControl
|
|||
|
|
{
|
|||
|
|
private ChannelInfo infoChannel;
|
|||
|
|
|
|||
|
|
IP_NET_DVR_DEVICEINFO deviceInfo = new IP_NET_DVR_DEVICEINFO();
|
|||
|
|
|
|||
|
|
//播放Panel中心和鼠标坐标,两点的差距
|
|||
|
|
public float X = 0;
|
|||
|
|
public float Y = 0;
|
|||
|
|
//是否移动
|
|||
|
|
public bool isMove = false;
|
|||
|
|
//在pnlReplayVideo的鼠标形状
|
|||
|
|
private System.Windows.Forms.Cursor sbFlag = System.Windows.Forms.Cursors.Default;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设置或获取鼠标样式
|
|||
|
|
/// </summary>
|
|||
|
|
public System.Windows.Forms.Cursor SbFlag
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return sbFlag;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
sbFlag = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//是否控制pnlReplayVideo
|
|||
|
|
private bool isControl = false;
|
|||
|
|
//云台控制的速度比例
|
|||
|
|
double PSZspeed = 1.0;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 用户编号,登陆的返回值
|
|||
|
|
/// </summary>
|
|||
|
|
private int m_userID = 0;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 播放后的返回值
|
|||
|
|
/// </summary>
|
|||
|
|
public int m_realPlay = -1;
|
|||
|
|
public int m_bSetParam = -1;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public bool haveLogin = false;
|
|||
|
|
|
|||
|
|
|
|||
|
|
fRealDataCallBack fReadlCallBack = null;
|
|||
|
|
fDecCallBackFunction fDecodecall = null;
|
|||
|
|
StatusEventCallBack fStatusCallBack = null;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 速度
|
|||
|
|
/// </summary>
|
|||
|
|
private string speed = "6";
|
|||
|
|
public UIControl_HBGK()
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private static bool bHaveInitTwoDll = false;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public UIControl_HBGK(ChannelInfo channelInfo)
|
|||
|
|
{
|
|||
|
|
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
|
|||
|
|
InitializeComponent();
|
|||
|
|
this.infoChannel = channelInfo;
|
|||
|
|
if (!bHaveInitTwoDll)
|
|||
|
|
{
|
|||
|
|
bHaveInitTwoDll = true;
|
|||
|
|
PLAYERDLL.IP_TPS_Init();
|
|||
|
|
NETSDKDLL.IP_NET_DVR_Init();
|
|||
|
|
}
|
|||
|
|
fDecodecall = new fDecCallBackFunction(OnDecCallBackFunction);
|
|||
|
|
fReadlCallBack = new fRealDataCallBack(OnRealDataCallBack);
|
|||
|
|
fStatusCallBack = new StatusEventCallBack(OnStatusEventCallBack);
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (infoChannel.nDeviceType != 2)
|
|||
|
|
{//NVR不用登录
|
|||
|
|
if (!InitAndLogin())
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_realPlay = RealPlayVideo();
|
|||
|
|
if (m_realPlay > 0)
|
|||
|
|
{
|
|||
|
|
//ILog.WriteEventLog("播放成功!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
MessageBox.Show("视频预览失败,错误编号:" + GetError(ID));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*System.Threading.Thread.Sleep(1000);
|
|||
|
|
m_realPlay = RealPlayVideo();
|
|||
|
|
if (m_realPlay > 0)
|
|||
|
|
{
|
|||
|
|
//ILog.WriteEventLog("播放成功!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
MessageBox.Show("视频预览失败,错误编号:" + GetError(ID));
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public int OnStatusEventCallBack(int lUser, int nStateCode, IntPtr pResponse, IntPtr pUser)
|
|||
|
|
{
|
|||
|
|
if (lUser == m_userID)
|
|||
|
|
{
|
|||
|
|
if (nStateCode == (int)enumNetSatateEvent.EVENT_LOGINOK)
|
|||
|
|
{
|
|||
|
|
haveLogin = true;
|
|||
|
|
if (m_realPlay <= 0)
|
|||
|
|
{
|
|||
|
|
m_realPlay = RealPlayVideo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (nStateCode == (int)enumNetSatateEvent.EVENT_LOGINFAILED || nStateCode == (int)enumNetSatateEvent.EVENT_LOGIN_USERERROR)
|
|||
|
|
{
|
|||
|
|
haveLogin = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public int OnDecCallBackFunction(int nPort, IntPtr pBuf, int nSize, ref FRAME_INFO pFrameInfo, IntPtr pUser, int nReserved2)
|
|||
|
|
{
|
|||
|
|
int kkk = 0;
|
|||
|
|
int jj = 0;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
#region ICCTVBrowse 成员
|
|||
|
|
|
|||
|
|
//public event EventClickAxAVShow eventClickAxAVShow;
|
|||
|
|
|
|||
|
|
//public event EventControlAV eventControlAV;
|
|||
|
|
|
|||
|
|
//public event EventOnLBDown eventOnLBDown;
|
|||
|
|
|
|||
|
|
//public event EventOnLBUp eventOnLBUp;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//public event EventDoubleClick eventDoubleClick;
|
|||
|
|
|
|||
|
|
//public event EventDMenuClick eventDMenuClick;
|
|||
|
|
|
|||
|
|
public void SetChoosed(bool chooseFlag)
|
|||
|
|
{
|
|||
|
|
//throw new Exception("The method or operation is not implemented.");
|
|||
|
|
}
|
|||
|
|
string saveFileFullPath = "";
|
|||
|
|
string newFileName = "";
|
|||
|
|
public string StartKinescope(string filePath)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
string saveFileName = "realVideo_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".hik";
|
|||
|
|
return StartKinescope(filePath, saveFileName);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public string StartKinescope(string filePath, string fileName)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
saveFileFullPath = filePath + "\\" + fileName;
|
|||
|
|
int startRecord = 0;
|
|||
|
|
|
|||
|
|
//ILog.WriteEventLog("saveFileFullPath:" + saveFileFullPath);
|
|||
|
|
if (!Directory.Exists(filePath))
|
|||
|
|
{
|
|||
|
|
Directory.CreateDirectory(filePath);
|
|||
|
|
}
|
|||
|
|
startRecord = NETSDKDLL.IP_NET_DVR_StartRecord(m_realPlay, saveFileFullPath.Substring(0, saveFileFullPath.Length - 4) + ".avi", 1800, 1800);
|
|||
|
|
//ILog.WriteEventLog("startRecord:" + startRecord);
|
|||
|
|
|
|||
|
|
newFileName = Path.GetDirectoryName(saveFileFullPath);
|
|||
|
|
|
|||
|
|
//ILog.WriteEventLog("newFileName:" + newFileName + "\\");
|
|||
|
|
if (startRecord > 0)
|
|||
|
|
{
|
|||
|
|
return "开始录像,路径-" + newFileName;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
return "录像失败:" + ID + GetError(ID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public string StopKinescope()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int stopRecord = 0;
|
|||
|
|
string result = "";
|
|||
|
|
stopRecord = NETSDKDLL.IP_NET_DVR_StopRecord(m_realPlay);
|
|||
|
|
Thread.Sleep(500);
|
|||
|
|
//ILog.WriteEventLog(("源文件:" + saveFileFullPath + ",目标文件:" + newFileName));
|
|||
|
|
|
|||
|
|
if (stopRecord > 0)
|
|||
|
|
{
|
|||
|
|
result = "停止录像";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
result = "停止录像失败:" + ID + GetError(ID);
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
return "录像或下载失败";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public string TakePictures(string filePath, string fileName)
|
|||
|
|
{
|
|||
|
|
//try
|
|||
|
|
//{
|
|||
|
|
|
|||
|
|
// ILog.WriteEventLog("进入截图+:" + filePath);
|
|||
|
|
// string result = "";
|
|||
|
|
// string tmpFileName = filePath + "\\" + DateTime.Now.ToFileTime().ToString() + ".bmp";
|
|||
|
|
|
|||
|
|
|
|||
|
|
// bool getPicture = NETSDKDLL.HB_SDVR_CapturePicture(m_realPlay, tmpFileName);
|
|||
|
|
// Thread.Sleep(1000);
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Image bmp = Bitmap.FromFile(tmpFileName);
|
|||
|
|
|
|||
|
|
// if (!Directory.Exists(filePath))
|
|||
|
|
// {
|
|||
|
|
// Directory.CreateDirectory(filePath);
|
|||
|
|
// }
|
|||
|
|
// bmp.Save(filePath + "\\" + fileName, ImageFormat.Jpeg);
|
|||
|
|
|
|||
|
|
// bmp.Dispose();
|
|||
|
|
|
|||
|
|
// try
|
|||
|
|
// {
|
|||
|
|
// if (File.Exists(tmpFileName))
|
|||
|
|
// {
|
|||
|
|
// File.Delete(tmpFileName);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// catch
|
|||
|
|
// {
|
|||
|
|
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (getPicture)
|
|||
|
|
// {
|
|||
|
|
|
|||
|
|
// result = "截图成功,路径-" + filePath + "-ID:" + infoChannel.ErrId + "-" + tmpFileName;
|
|||
|
|
// }
|
|||
|
|
// else
|
|||
|
|
// {
|
|||
|
|
// int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
// result = "截图失败:" + ID + GetError(ID);
|
|||
|
|
// }
|
|||
|
|
// return result;
|
|||
|
|
//}
|
|||
|
|
//catch (Exception ex)
|
|||
|
|
//{
|
|||
|
|
return "截图失败";
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string TakePictures(string filePath)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
string tmpFileName = DateTime.Now.ToFileTime().ToString() + ".jpg";
|
|||
|
|
return TakePictures(filePath, tmpFileName);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
return "截图失败:" + ex.Message;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool GetIsHaveVideo()
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool GetIsHavePic()
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
private int actionType = 0;
|
|||
|
|
|
|||
|
|
public bool PtzControl(string deviceID, string channelID, Nanji_Island.EnumCollection.EnumCCTVControlType ecccTVCT, out string result)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int uSpeed = Convert.ToUInt16(int.Parse(this.speed) * PSZspeed);
|
|||
|
|
string xmlaction = string.Empty;
|
|||
|
|
int stResult = -1;
|
|||
|
|
bool isSpeed = false;
|
|||
|
|
switch (ecccTVCT)
|
|||
|
|
{
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.TILT_UP:
|
|||
|
|
//actionType = 17;
|
|||
|
|
xmlaction = "up";
|
|||
|
|
isSpeed = true;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.TILT_DOWN:
|
|||
|
|
//actionType = 18;
|
|||
|
|
xmlaction = "down";
|
|||
|
|
isSpeed = true;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.PAN_LEFT:
|
|||
|
|
xmlaction = "left";
|
|||
|
|
isSpeed = true;
|
|||
|
|
//actionType = 21;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.PAN_RIGHT:
|
|||
|
|
xmlaction = "right";
|
|||
|
|
isSpeed = true;
|
|||
|
|
//actionType = 22;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.Pan_NW:
|
|||
|
|
xmlaction = "left_up";
|
|||
|
|
isSpeed = true;
|
|||
|
|
//actionType = 19;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.Pan_NE:
|
|||
|
|
xmlaction = "right_up";
|
|||
|
|
isSpeed = true;
|
|||
|
|
//actionType = 20;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.Pan_SW:
|
|||
|
|
xmlaction = "left_down";
|
|||
|
|
isSpeed = true;
|
|||
|
|
//actionType = 23;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.Pan_SE:
|
|||
|
|
xmlaction = "right_down";
|
|||
|
|
isSpeed = true;
|
|||
|
|
//actionType = 24;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.ZOOM_IN:
|
|||
|
|
xmlaction = "zoomtele";
|
|||
|
|
//actionType = 11;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.ZOOM_OUT:
|
|||
|
|
xmlaction = "zoomwide";
|
|||
|
|
//actionType = 9;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.FOCUS_FAR:
|
|||
|
|
xmlaction = "FocusFarAutoOff";
|
|||
|
|
//actionType = 14;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.FOCUS_NEAR:
|
|||
|
|
xmlaction = "FocusNearAutoOff";
|
|||
|
|
//actionType = 13;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.IRIS_OPEN:
|
|||
|
|
xmlaction = "IrisOpenAutoOff";
|
|||
|
|
//actionType = 15;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.IRIS_CLOSE:
|
|||
|
|
xmlaction = "IrisCloseAutoOff";
|
|||
|
|
//actionType = 16;
|
|||
|
|
break;
|
|||
|
|
case Nanji_Island.EnumCollection.EnumCCTVControlType.STOP:
|
|||
|
|
xmlaction = "stop";
|
|||
|
|
//actionType = 30;
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
xmlaction = "stop";
|
|||
|
|
//actionType = 30;
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
string xmlBody = "<xml>";
|
|||
|
|
xmlBody = xmlBody + "<cmd>" + xmlaction + "</cmd>";
|
|||
|
|
if (isSpeed)
|
|||
|
|
{
|
|||
|
|
xmlBody = xmlBody + "<panspeed>" + uSpeed.ToString() + "</panspeed>";
|
|||
|
|
xmlBody = xmlBody + "<tiltspeed>" + uSpeed.ToString() + "</tiltspeed>";
|
|||
|
|
}
|
|||
|
|
xmlBody = xmlBody + "</xml>";
|
|||
|
|
|
|||
|
|
stResult = NETSDKDLL.IP_NET_DVR_PTZControlEx(m_userID, xmlBody);
|
|||
|
|
if (stResult < 0)
|
|||
|
|
{
|
|||
|
|
result = "控制失败--stResult:" + stResult + ",infoChannel.MonitorName:" + infoChannel.MonitorName + ",actionType:" + actionType;
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
//ILog.WriteErrorLog("之后错误ID:" + ID);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
result = "控制成功";
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public bool IsPTZControl
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public bool RequestControl()
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool StopControl()
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool ReleaseResources(string stopClass)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
StopRealPlayVideo(this.m_realPlay);
|
|||
|
|
//ClearupVideo();
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show(ex.Message);
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool VideoLogin()
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
public bool VideoLogOut()
|
|||
|
|
{
|
|||
|
|
LogoutVideo(m_userID);
|
|||
|
|
System.Threading.Thread.Sleep(200);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
public bool SetPreset(int presetId, out string result)
|
|||
|
|
{
|
|||
|
|
if (NETSDKDLL.IP_NET_DVR_PTZPreset(m_userID, 8, presetId) > 0)
|
|||
|
|
{
|
|||
|
|
result = "设置预置位成功";
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
result = "设置预置位失败" + ID + GetError(ID);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool GetPreset(int presetId, out string result)
|
|||
|
|
{
|
|||
|
|
if (NETSDKDLL.IP_NET_DVR_PTZPreset(m_userID, 39, presetId) > 0)
|
|||
|
|
{
|
|||
|
|
result = "调用预置位成功";
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
result = "调用预置位失败" + ID + GetError(ID);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void SetControlSpeed(string controlSpeed)
|
|||
|
|
{
|
|||
|
|
this.speed = controlSpeed;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public ChannelInfo getChannel()
|
|||
|
|
{
|
|||
|
|
return infoChannel;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
public bool PTZPreset(EnumCollection.EnumCCTVControlType ecccTVCT, int dwPresetIndex, out string result)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (ecccTVCT == Nanji_Island.EnumCollection.EnumCCTVControlType.SET_PRESET)
|
|||
|
|
{
|
|||
|
|
if (NETSDKDLL.IP_NET_DVR_PTZPreset(
|
|||
|
|
m_realPlay, 8, dwPresetIndex) > 0)
|
|||
|
|
{
|
|||
|
|
result = "设置预置位成功";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
result = "设置预置位失败" + ID + GetError(ID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if (ecccTVCT == Nanji_Island.EnumCollection.EnumCCTVControlType.GO_PRESET)
|
|||
|
|
{
|
|||
|
|
if (NETSDKDLL.IP_NET_DVR_PTZPreset(
|
|||
|
|
m_realPlay, 39, dwPresetIndex) > 0)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
result = "调用预置位成功";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
result = "调用预置位失败" + ID + GetError(ID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
result = "";
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public int StopRealPlayVideo(int lRealHandle)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int nRet = NETSDKDLL.IP_NET_DVR_StopRealPlay(lRealHandle);
|
|||
|
|
PLAYERDLL.IP_TPS_DeleteStream(infoChannel.nPlayPort);
|
|||
|
|
m_realPlay = -1;
|
|||
|
|
m_bSetParam = -1;
|
|||
|
|
return nRet;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#region 退出视频
|
|||
|
|
//*****************************************************************************************
|
|||
|
|
/// <summary>
|
|||
|
|
/// 退出视频
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="lUserID">用户ID</param>
|
|||
|
|
/// <returns>是否成功</returns>
|
|||
|
|
//*****************************************************************************************
|
|||
|
|
public int LogoutVideo(int lUserID)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int logOut = -1;
|
|||
|
|
if (lUserID != -1)
|
|||
|
|
{
|
|||
|
|
logOut = NETSDKDLL.IP_NET_DVR_Logout(lUserID);
|
|||
|
|
}
|
|||
|
|
return logOut;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region 清除视频
|
|||
|
|
//*****************************************************************************************
|
|||
|
|
/// <summary>
|
|||
|
|
/// 清除视频
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>是否成功</returns>
|
|||
|
|
//*****************************************************************************************
|
|||
|
|
public int ClearupVideo()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
NETSDKDLL.IP_NET_DVR_Cleanup();
|
|||
|
|
PLAYERDLL.IP_TPS_ReleaseAll();
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
public bool StopVideo(string chlID, int userID)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (StopRealPlayVideo(this.m_realPlay) > 0)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show(ex.Message);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool InitAndLogin()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (InitVideo() == 0)
|
|||
|
|
{
|
|||
|
|
if (m_userID != 0)
|
|||
|
|
{
|
|||
|
|
NETSDKDLL.IP_NET_DVR_Cleanup();
|
|||
|
|
NETSDKDLL.IP_NET_DVR_Logout(m_userID);
|
|||
|
|
System.Threading.Thread.Sleep(200);
|
|||
|
|
haveLogin = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
NETSDKDLL.IP_NET_DVR_SetStatusEventCallBack(fStatusCallBack, IntPtr.Zero);
|
|||
|
|
|
|||
|
|
m_userID = LoginVideo(this.infoChannel.RemoteIP.Trim(),
|
|||
|
|
(short)(Convert.ToInt32(this.infoChannel.PtzPort)),
|
|||
|
|
this.infoChannel.RemoteUser.Trim(),
|
|||
|
|
this.infoChannel.RemotePwd.Trim(),
|
|||
|
|
ref deviceInfo);//
|
|||
|
|
if (m_userID == -1)
|
|||
|
|
{
|
|||
|
|
int ID = (int)NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
//ILog.WriteEventLog("登录失败,错误码:" + ID + GetError(ID));
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int ID = NETSDKDLL.IP_NET_DVR_GetLastErrorCode(0);
|
|||
|
|
MessageBox.Show("初始化失败:" + ID + GetError(ID));
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private static bool bHaveInitVideo = false;
|
|||
|
|
|
|||
|
|
public int InitVideo()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (!bHaveInitVideo)
|
|||
|
|
{
|
|||
|
|
bHaveInitVideo = true;
|
|||
|
|
return NETSDKDLL.IP_NET_DVR_Init();
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public int LoginVideo(string sDVRIP, short wDVRPort, string sUserName, string sPassword, ref IP_NET_DVR_DEVICEINFO lpDeviceInfo)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int logIn = -1;
|
|||
|
|
if (sDVRIP != "" && sUserName != "" && sPassword != "")
|
|||
|
|
{
|
|||
|
|
logIn = NETSDKDLL.IP_NET_DVR_Login(sDVRIP, wDVRPort, sUserName, sPassword, ref lpDeviceInfo);
|
|||
|
|
}
|
|||
|
|
return logIn;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(ex.Message);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public string GetError(int ErrorId)
|
|||
|
|
{
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public int RealPlayVideo()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (m_realPlay == 0)
|
|||
|
|
{
|
|||
|
|
NETSDKDLL.IP_NET_DVR_StopRealPlay(m_realPlay);
|
|||
|
|
System.Threading.Thread.Sleep(200);
|
|||
|
|
}
|
|||
|
|
IP_NET_DVR_CLIENTINFO clientInfo = new IP_NET_DVR_CLIENTINFO();
|
|||
|
|
USRE_VIDEOINFO puser = new USRE_VIDEOINFO();
|
|||
|
|
clientInfo.lChannel = int.Parse(infoChannel.ChlID);
|
|||
|
|
puser.pUserData = this.VideoPanel.Handle;
|
|||
|
|
puser.nVideoPort = infoChannel.RemotePort;
|
|||
|
|
puser.bIsTcp = 1;
|
|||
|
|
if (this.infoChannel.nDeviceType == 2)
|
|||
|
|
{
|
|||
|
|
puser.nVideoChannle = (infoChannel.nDeviceType << 16) | (int.Parse(infoChannel.RemoteChannle) | (int.Parse(infoChannel.ChlID) << 8));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
puser.nVideoChannle = 1;
|
|||
|
|
}
|
|||
|
|
m_realPlay = NETSDKDLL.IP_NET_DVR_RealPlayEx(m_userID, this.infoChannel.RemoteIP, infoChannel.RemoteUser, infoChannel.RemotePwd, fReadlCallBack, ref puser, 0);//"tps://" +
|
|||
|
|
infoChannel.nRealDataHandle = m_realPlay;
|
|||
|
|
return m_realPlay;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public int OnRealDataCallBack(int lRealHandle, int dwDataType, IntPtr pBuffer, int dwBufSize, ref FRAME_EXTDATA pExtData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
IntPtr pWnd = pExtData.pUserData;
|
|||
|
|
if (pWnd == this.VideoPanel.Handle)
|
|||
|
|
{
|
|||
|
|
if (dwDataType == 0)
|
|||
|
|
{
|
|||
|
|
return PLAYERDLL.IP_TPS_InputVideoData(infoChannel.nPlayPort, pBuffer, dwBufSize, pExtData.bIsKey, (int)pExtData.timestamp);
|
|||
|
|
}
|
|||
|
|
else if (dwDataType == 1)
|
|||
|
|
{
|
|||
|
|
return PLAYERDLL.IP_TPS_InputAudioData(infoChannel.nPlayPort, pBuffer, dwBufSize, (int)pExtData.timestamp);
|
|||
|
|
}
|
|||
|
|
else if (dwDataType == 2 && m_bSetParam == -1)
|
|||
|
|
{
|
|||
|
|
STREAM_AV_PARAM avParam = new STREAM_AV_PARAM();
|
|||
|
|
avParam = (STREAM_AV_PARAM)Marshal.PtrToStructure(pBuffer, avParam.GetType());
|
|||
|
|
int size = Marshal.SizeOf(typeof(VIDEO_PARAM));
|
|||
|
|
IntPtr pVideoParam = Marshal.AllocHGlobal(10240);
|
|||
|
|
Marshal.StructureToPtr(avParam.videoParam, pVideoParam, false);
|
|||
|
|
int nPortValue = infoChannel.nPlayPort;
|
|||
|
|
PLAYERDLL.IP_TPS_OpenStream(nPortValue, pVideoParam, size, 0, 40);
|
|||
|
|
if (avParam.bHaveAudio != 0)
|
|||
|
|
{
|
|||
|
|
IntPtr pAudioParam = Marshal.AllocHGlobal(10240);
|
|||
|
|
Marshal.StructureToPtr(avParam.audioParam, pAudioParam, false);
|
|||
|
|
int size1 = Marshal.SizeOf(typeof(AUDIO_PARAM));
|
|||
|
|
PLAYERDLL.IP_TPS_OpenStream(nPortValue, pAudioParam, size1, 1, 30);
|
|||
|
|
}
|
|||
|
|
Marshal.FreeHGlobal(pVideoParam);
|
|||
|
|
//如果不想播放只需要解码后的数据,请将后面两行代码打开,后面第三行代码注释掉
|
|||
|
|
//PLAYERDLL.IP_TPS_SetDecCallBack(nPortValue, fDecodecall, IntPtr.Zero);
|
|||
|
|
//PLAYERDLL.IP_TPS_Play(nPortValue, IntPtr.Zero);
|
|||
|
|
PLAYERDLL.IP_TPS_Play(nPortValue, this.VideoPanel.Handle);
|
|||
|
|
m_bSetParam = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void VideoPanel_Paint(object sender, PaintEventArgs e)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|