大华网络摄像头使用C#实现录像,保存录像文件

缺点就是需要调用的库太多,而我又不敢去掉一些库,怕出问题

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值