海康威视摄像机SDK代码整理

对海康威视的实时预览demo做了整理。提取了比较常用的一些方法。

  • 预览
  • 对讲
  • 抓图
  • 录像
  • 云台控制 
复制代码
using PreviewDemo;
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;

public class VideoClass
{
    /// <summary>
    /// 索引号
    /// </summary>
    public int Index { get; set; }
    /// <summary>
    /// IP地址
    /// </summary>
    public string IP { get; set; }
    /// <summary>
    /// 端口号
    /// </summary>
    public ushort Port { get; set; }
    /// <summary>
    /// 登录名
    /// </summary>
    public string UserName { get; set; }
    /// <summary>
    /// 登录密码
    /// </summary>
    public string PassWord { get; set; }
    /// <summary>
    /// 摄像机名称
    /// </summary>
    public string VideoName { get; set; }
    /// <summary>
    /// 连接ID
    /// </summary>
    public Int32 ConnectID { get; set; } = -1;
    /// <summary>
    /// 错误代码
    /// </summary>
    public uint ILastErr { get; private set; }
    /// <summary>
    /// 预览ID
    /// </summary>
    public int PlayID { get; private set; }
    /// <summary>
    /// 所在容器
    /// </summary>
    public PictureBox ShowPicBox { get; set; }

    /// <summary>
    /// 预览设置
    /// </summary>
    CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO()
    {
        //预te览的设备通道
        lChannel = 1,
        //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
        dwStreamType = 1,//原来此处是 0
        //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP 
        dwLinkMode = 4,//原来此处是0
        //0- 非阻塞取流,1- 阻塞取流
        bBlocked = true,
        //播放库播放缓冲区最大缓冲帧数
        dwDisplayBufNum = 5, 
        byProtoType = 0,
        byPreviewMode = 0
    };
    /// <summary>
    /// 打开预览
    /// </summary>
    /// <param name="RealPlayWnd">预览容器</param>
    /// <returns></returns>
    public void StartPaly(PictureBox box,out bool Success,out string Message)
    {
        //lpPreviewInfo.hPlayWnd = PlayWnd.Handle;
        //PlayWnd.Click += Control_Click;
        //PlayWnd.DoubleClick += Control_DoubleClick;
        lpPreviewInfo.hPlayWnd = box.Handle;
        ShowPicBox = box;
        IntPtr pUser = new IntPtr();
        PlayID = CHCNetSDK.NET_DVR_RealPlay_V40(ConnectID, ref lpPreviewInfo, null, pUser);
        if (PlayID < 0)
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "预览失败。错误代码:" + ILastErr;
            Playing = false;
            Success = false;
            
        }
        else
        {
            int p = CHCNetSDK.NET_DVR_GetRealPlayerIndex(PlayID);
            PlayCtrl.PlayM4_RenderPrivateData(p, 2, false);
            Playing = true;
            Message = "";
            Success = true;
        }
    }
    public bool Playing { get; private set; }
    IntPtr pUser = new IntPtr();
    /// <summary>
    /// 开始预览
    /// 用在主预览结束之后,恢复到原来的小屏预览。或者在预览窗口停止预览之后,重新开始预览
    /// </summary>
    /// <returns></returns>
    public void StartPaly(out bool Success,out string Message)
    {
        StopPaly(out bool Success2, out string Message2);
        lpPreviewInfo.hPlayWnd = ShowPicBox.Handle;
        lpPreviewInfo.dwStreamType = 1;
        lpPreviewInfo.dwLinkMode = 4;
        PlayID = CHCNetSDK.NET_DVR_RealPlay_V40(ConnectID, ref lpPreviewInfo, null, pUser);
        if (PlayID < 0)
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "预览失败。错误代码:" + ILastErr;
            Success = false;
        }
        else
        {
            int p = CHCNetSDK.NET_DVR_GetRealPlayerIndex(PlayID);
            PlayCtrl.PlayM4_RenderPrivateData(p, 2, false);
            Playing = true;
            Message = "";
            Success = true;
        }
    }
    /// <summary>
    /// 主预览的时候切换取码流和连接方式
    /// </summary>
    /// <param name="Success"></param>
    /// <param name="Message"></param>
    public void StartMainPlay(out bool Success,out string Message)
    {
        StopPaly(out bool Success2, out string Message2);
        lpPreviewInfo.dwStreamType = 0;
        lpPreviewInfo.dwLinkMode = 0;
        lpPreviewInfo.hPlayWnd = ShowPicBox.Handle;
        PlayID = CHCNetSDK.NET_DVR_RealPlay_V40(ConnectID, ref lpPreviewInfo, null, pUser);
        if (PlayID < 0)
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "预览失败。错误代码:" + ILastErr;
            Success = false;
        }
        else
        {
            int p = CHCNetSDK.NET_DVR_GetRealPlayerIndex(PlayID);
            PlayCtrl.PlayM4_RenderPrivateData(p, 2, false);
            Playing = true;
            Message = "";
            Success = true;
        }
    }

    /// <summary>
    /// 停止预览
    /// </summary>
    /// <returns></returns>
    public void StopPaly(out bool Success,out string Message)
    {
        if (!CHCNetSDK.NET_DVR_StopRealPlay(PlayID))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "停止预览失败。错误代码:" + ILastErr;
            Success = true;
        }
        else
        {
            Playing = false;
            Message = "";
            Success = true;
        }
    }
    /// <summary>
    /// 连接设备
    /// </summary>
    /// <param name="IP">IP地址</param>
    /// <param name="Port">设备端口号</param>
    /// <param name="UserName">设备用户名</param>
    /// <param name="Password">设备密码</param>
    /// <returns>连接ID</returns>
    public void ConnectionVideo()
    {
        Int32 m_lUserID1;
        CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO();
        //设备IP地址
        byte[] byIP = System.Text.Encoding.Default.GetBytes(IP);
        struLogInfo.sDeviceAddress = new byte[129];
        byIP.CopyTo(struLogInfo.sDeviceAddress, 0);
        //设备端口号
        struLogInfo.wPort = Port;
        //设备用户名
        byte[] byUserName = System.Text.Encoding.Default.GetBytes(UserName);
        struLogInfo.sUserName = new byte[64];
        byUserName.CopyTo(struLogInfo.sUserName, 0);
        //设备密码
        byte[] byPassWord = System.Text.Encoding.Default.GetBytes(PassWord);
        struLogInfo.sPassword = new byte[64];
        byPassWord.CopyTo(struLogInfo.sPassword, 0);

        CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();
        //连接设备
        m_lUserID1 = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo);
        if (m_lUserID1 < 0)
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            ConnectID = -1;
        }
        else
        {
            ConnectID = m_lUserID1;
        }
    }
    #region 云台控制的代码

    /// <summary>
    /// 云台向上
    /// </summary>
    public void Up_MouseDown(out bool Success,out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.TILT_UP, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Up_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.TILT_UP, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台向下
    /// </summary>
    public void Down_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.TILT_DOWN, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Down_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.TILT_DOWN, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台左上
    /// </summary>
    public void Left_up_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.UP_LEFT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Left_up_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.UP_LEFT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台右上
    /// </summary>
    public void Right_up_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.UP_RIGHT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Right_up_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.UP_RIGHT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台左下
    /// </summary>
    public void Left_down_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.DOWN_LEFT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Left_down_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.DOWN_LEFT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台右下
    /// </summary>
    public void Right_down_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.DOWN_RIGHT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Right_down_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.DOWN_RIGHT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台向左
    /// </summary>
    public void Left_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.PAN_LEFT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Left_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.PAN_LEFT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 云台向右
    /// </summary>
    public void Right_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.PAN_RIGHT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Right_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.PAN_RIGHT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 焦距变大
    /// </summary>
    public void Zoom_in_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.ZOOM_IN, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Zoom_in_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.ZOOM_IN, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 焦距变小
    /// </summary>
    public void Zoom_out_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.ZOOM_OUT, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Zoom_out_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.ZOOM_OUT, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 焦点前调
    /// </summary>
    public void Focus_near_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.FOCUS_NEAR, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Focus_near_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.FOCUS_NEAR, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 焦点后调
    /// </summary>
    public void Focus_far_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.FOCUS_FAR, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Focus_far_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.FOCUS_FAR, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 光圈扩大
    /// </summary>
    public void Iris_open_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.IRIS_OPEN, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Iris_open_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.IRIS_OPEN, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    /// <summary>
    /// 光圈缩小
    /// </summary>
    public void Iris_close_MouseDown(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.IRIS_CLOSE, 0, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "按下时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    public void Iris_close_MouseUp(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_PTZControlWithSpeed(PlayID, (uint)CHCNetSDK.IRIS_CLOSE, 1, 3))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "放开时发生错误。错误代码" + ILastErr;
            Success = false;
        }
        else
        {
            Success = true;
            Message = "";
        }
    }
    #endregion 云台控制代码结束
    /// <summary>
    /// 语音对讲状态
    /// </summary>
    public bool Talking { get; private set; } = false;
    /// <summary>
    /// 语音对讲
    /// </summary>
    /// <param name="Success"></param>
    /// <param name="Message"></param>
    public void Talk(out bool Success, out string Message)
    {
        if (Talking == false)
        {
            int lVoiceComHandle = 0;
            //开始语音对讲 Start two-way talk
            CHCNetSDK.VOICEDATACALLBACKV30 VoiceData = new CHCNetSDK.VOICEDATACALLBACKV30(VoiceDataCallBack);//预览实时流回调函数
            lVoiceComHandle = CHCNetSDK.NET_DVR_StartVoiceCom_V30(ConnectID, 1, true, VoiceData, IntPtr.Zero);
            //bNeedCBNoEncData [in]需要回调的语音数据类型:0- 编码后的语音数据,1- 编码前的PCM原始数据
            if (lVoiceComHandle < 0)
            {
                ILastErr = CHCNetSDK.NET_DVR_GetLastError();
                Message = "对讲打开失败, 错误代码= " + ILastErr;
                Success = false;
            }
            else
            {
                Talking = true;
                Success = true;
                Message = "";
            }
        }
        else
        {
            Success = false;
            Message = "请先停止对讲";
        }
    }

    public void VoiceDataCallBack(int lVoiceComHandle, IntPtr pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, System.IntPtr pUser)
    {
        byte[] sString = new byte[dwBufSize];
        Marshal.Copy(pRecvDataBuffer, sString, 0, (Int32)dwBufSize);
        if (byAudioFlag == 0)
        {
            //将缓冲区里的音频数据写入文件 save the data into a file
            string str = "PC采集音频文件.pcm";
            FileStream fs = new FileStream(str, FileMode.Create);
            int iLen = (int)dwBufSize;
            fs.Write(sString, 0, iLen);
            fs.Close();
        }
        if (byAudioFlag == 1)
        {
            //将缓冲区里的音频数据写入文件 save the data into a file
            string str = "设备音频文件.pcm";
            FileStream fs = new FileStream(str, FileMode.Create);
            int iLen = (int)dwBufSize;
            fs.Write(sString, 0, iLen);
            fs.Close();
        }
    }
    /// <summary>
    /// 停止对讲
    /// </summary>
    /// <param name="Success"></param>
    /// <param name="Message"></param>
    public void StopTalk(out bool Success, out string Message)
    {
        int lVoiceComHandle = 0;
        //停止语音对讲 Stop two-way talk
        if (!CHCNetSDK.NET_DVR_StopVoiceCom(lVoiceComHandle))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "对讲关闭失败, 错误代码= " + ILastErr;
            Success = false;
        }
        else
        {
            Talking = false;
            Message = "";
            Success = true;
        }
    }
    /// <summary>
    /// 抓取截图
    /// </summary>
    /// <param name="FilePath">保存文件路径</param>
    /// <param name="Success">成功与否</param>
    /// <param name="Message">提示信息</param>
    public void Capture(string FilePath, out bool Success, out string Message)
    {
        string FileName = FilePath + VideoName + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".jpg";
        CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA
        {
            wPicQuality = 0, //图像质量 Image quality
            wPicSize = 0xff //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档
        };
        if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(ConnectID, 1, ref lpJpegPara, FileName))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Success = false;
            Message = "保存失败。错误代码:" + ILastErr;
        }
        else
        {
            Success = true;
            Message = $"保存成功,保存在{FilePath}文件夹下!";
        }
    }
    /// <summary>
    /// 录像状态
    /// </summary>
    public bool BRecord { get; private set; } = false;
    /// <summary>
    /// 开始录像
    /// </summary>
    /// <param name="FilePath">保存的文件夹路径</param>
    /// <param name="Success">成功与否</param>
    /// <param name="Message">错误信息</param>
    public void SaveRecord(string FilePath, out bool Success, out string Message)
    {
        string FileName = FilePath + VideoName + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".mp4";
        if (BRecord == false)
        {
            CHCNetSDK.NET_DVR_MakeKeyFrame(ConnectID, 1);
            //开始录像
            if (!CHCNetSDK.NET_DVR_SaveRealData_V30(PlayID, 2, FileName))
            {
                ILastErr = CHCNetSDK.NET_DVR_GetLastError();
                Message = "录像失败。错误代码:" + ILastErr;
                Success = false;
            }
            else
            {
                BRecord = true;
                Message = "";
                Success = true;
            }
        }
        else
        {
            Message = "请先停止录像!";
            Success = false;
        }
    }
    /// <summary>
    /// 停止录像
    /// </summary>
    /// <param name="Success"></param>
    /// <param name="Message"></param>
    public void Stop_SaveRecord(out bool Success, out string Message)
    {
        if (!CHCNetSDK.NET_DVR_StopSaveRealData(PlayID))
        {
            ILastErr = CHCNetSDK.NET_DVR_GetLastError();
            Message = "停止录像失败,错误代码:" + ILastErr;
            Success = false;
        }
        else
        {
            BRecord = false;
            Message = "成功保存录像!";
            Success = true;
        }
    }
    /// <summary>
    /// 断开连接
    /// </summary>
    /// <param name="videos"></param>
    public void DisConnectVideo()
    {
        CHCNetSDK.NET_DVR_Logout(ConnectID);
    }
}
复制代码

 

posted @   坤机嘎嘎嘎  阅读(1767)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示