缺点就是需要调用的库太多,而我又不敢去掉一些库,怕出问题
using NetSDK;
using PlaySDK;
using System.Net;
using System.IO;
if (CheckCameraIsOnline())
{
//没打开摄像头的话放哪里都会卡的
ConfigCameraConPar();
LoginCamera();
StartRecord();
}
else
{
MessageBox.Show(“摄像头不在线,请连接摄像头后重新启动程序!”, “提示”);
}
#region 录像
#region 参数声明
/// <summary>
/// 设备用户登录ID
/// </summary>
private int CameraLoginID;
/// <summary>
/// IP地址
/// </summary>
string CameraIP;
/// <summary>
/// 端口
/// </summary>
ushort CameraPort;
/// <summary>
/// 用户名
/// </summary>
string CameraUserName;
/// <summary>
/// 密码
/// </summary>
string CameraPassword;
private NET_DEVICEINFO CameraDeviceInfo;
/// <summary>
/// 实时监视句柄
/// </summary>
private int Camera_uRealHandle;
/// <summary>
/// 程序消息提示Title
/// </summary>
private const string Camera_pMsgTitle = "监控提示";
/// <summary>
///实时监视数据回调
/// </summary>
private fRealDataCallBack Camera_cbRealData;
/// <summary>
/// 是否己设置实时数据回调
/// </summary>
private bool blnSetRealDataCallBack = false;
/// <summary>
/// 断开连接回调
/// </summary>
private fDisConnect Camera_disConnect;
private bool CameraOnlineState;
#endregion
private bool CheckCameraIsOnline()
{
String hostName = Dns.GetHostName();
IPAddress[] ips = Dns.GetHostAddresses(hostName);
foreach (IPAddress address in ips)
{
//2023-6-4,自即日起,定192.168.1.199为开发者,192.168.1.99为使用者,所有使用摄像头的电脑都应改为99地址
if (address.ToString().Equals("192.168.1.199") || address.ToString().Equals("192.168.1.99"))
{
return true;
}
}
return false;
}
private void ConfigCameraConPar()
{
CameraIP = "192.168.1.108";
CameraPort = 37777;
CameraUserName = "admin";
CameraPassword = "";
CameraDeviceInfo = new NET_DEVICEINFO();
try
{
Camera_disConnect = new fDisConnect(DisConnectEvent);
bool blnInit = NETClient.NETInit(Camera_disConnect, IntPtr.Zero);
//MessageBox.Show((blnInit == true ? "successfully" : "failed"), pMsgTitle);
}
catch (Exception ex)
{
throw;
}
}
private void DisConnectEvent(int lLoginID, StringBuilder pchDVRIP, int nDVRPort, IntPtr dwUser)
{
MessageBox.Show("设备断开!", Camera_pMsgTitle);
}
private void LoginCamera()
{
int error = 0;
CameraLoginID = NETClient.NETLogin(CameraIP, CameraPort, CameraUserName, CameraPassword, out CameraDeviceInfo, out error);
NETClient.NETSetupDeviceTime(CameraLoginID,DateTime.Now);
}
private void StartRecord()
{
if (CameraLoginID != 0)
{
Camera_uRealHandle = NETClient.NETRealPlay(CameraLoginID, 0, IntPtr.Zero);//Only data, no play
Camera_cbRealData = new fRealDataCallBack(cbRealDataFun);
if (NETPlay.NETPlayControl(PLAY_COMMAND.OpenStream, 0, IntPtr.Zero, 0, (UInt32)(900 * 1024)))
{
// MessageBox.Show("Open stream play successfully!", pMsgTitle);
}
else
{
MessageBox.Show("打开流播放失败!!", Camera_pMsgTitle);
return;
}
if (NETPlay.NETSetStreamOpenMode(0, PLAY_MODE.STREAME_REALTIME))//Set stream play mode
{
//MessageBox.Show("Set stream play mode successfullly!", pMsgTitle);
}
else
{
MessageBox.Show("设置流播放模式失败!", Camera_pMsgTitle);
return;
}
if (NETPlay.NETPlayControl(PLAY_COMMAND.Start, 0, pbImage.Handle))
{
// MessageBox.Show("Stream play start successfully!", pMsgTitle);
}
else
{
MessageBox.Show("流播放开始失败!", Camera_pMsgTitle);
return;
}
if (blnSetRealDataCallBack == true)
{
return;
}
if (NETClient.NETSetRealDataCallBack(Camera_uRealHandle, Camera_cbRealData, IntPtr.Zero))//设置数据回调处理函数
{
// MessageBox.Show("Set data call process function successfully!", pMsgTitle);
blnSetRealDataCallBack = true;
}
else
{
MessageBox.Show("设置数据回调处理函数失败!", Camera_pMsgTitle);
blnSetRealDataCallBack = false;
return;
}
}
}
/// <summary>
/// Real-time monitor data call process
/// </summary>
/// <param name="lRealHandle"></param>
/// <param name="dwDataType"></param>
/// <param name="pBuffer"></param>
/// <param name="dwBufSize"></param>
/// <param name="dwUser"></param>
private void cbRealDataFun(int lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr dwUser)
{
NETPlay.NETPlayControl(PLAY_COMMAND.InputData, 0, pBuffer, dwBufSize);//Here second parameter nPort parameter corresponds to network monitor data RealHandle
}
private void StopRecord()
{
NETPlay.NETPlayControl(PLAY_COMMAND.Stop, 0);
NETPlay.NETPlayControl(PLAY_COMMAND.CloseStream, 0);
}
private void CloseCamera()
{
NETClient.NETLogout(CameraLoginID);
}
private void StartSaveRecord(string directoryPath, string filePath)
{
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
//地址不能为系统盘
bool flag = NETClient.NETStartSaveRealData(Camera_uRealHandle, filePath);
}
private void StopSaveRecord()
{
NETClient.NETStopSaveRealData(Camera_uRealHandle);
}
#endregion