C#使用WebService调用海康SDK实现抓图与录像实时下载

1.海康设备网络SDK下载

下载地址:https://www.hikvision.com/cn/download_more_401.html

下载完毕解压后的目录结构如下:
在这里插入图片描述

2.代码实现

通过参考“CH-HCNetSDKV6.0.2.35_build20190411_Win32\Demo示例\3- C# 开发示例\1-实时预览示例代码一”路径下的示例项目,控制海康录像机进行抓拍图片与实时下载录像功能

2.1 算了不贴代码了,这个MarkDown编辑器真tm难用,为什么复制过来的代码变成这样?

在这里插入图片描述

2.2 主要代码

2.2.1 Web.config

 <appSettings>
    <!--海康摄像机配置-->
    <add key="dvrIp" value="10.14.8.70"/>
    <add key="dvrPort" value="8000"/>
    <add key="dvrUserName" value="admin"/>
    <add key="dvrPassword" value="12345"/>
    
    <!--图片视频存储路径配置-->
    <add key="picturePath" value="C:\\HYKJ\\Pictures\\"/>
    <add key="videoPath" value="C:\\HYKJ\\Videos\\"/>
  </appSettings>

2.2.2 WebService1.asmx

public static string dvrIp = ConfigurationManager.AppSettings["dvrIp"].ToString();              //录像机IP
public static string dvrPort = ConfigurationManager.AppSettings["dvrPort"].ToString();          //录像机端口
public static string dvrUserName = ConfigurationManager.AppSettings["dvrUserName"].ToString();  //录像机用户名
public static string dvrPassword = ConfigurationManager.AppSettings["dvrPassword"].ToString();  //录像机密码

public static string picPath = ConfigurationManager.AppSettings["picturePath"].ToString();  //图片存储路径 C:\\HYKJ\\Pictures\\
public static string vidPath = ConfigurationManager.AppSettings["videoPath"].ToString();  //录像存储路径 C:\\HYKJ\\Videos\\

/// <summary>
        /// 海康录像机登录实例
        /// </summary>
        private static Int32 m_lUserID = -1;
        /// <summary>
        /// 海康错误号
        /// </summary>
        private static uint iLastErr = 0;
        /// <summary>
        /// 用于接收海康调用接口返回信息
        /// </summary>
        private static string str;
        /// <summary>
        /// 海康SDK是否初始化
        /// </summary>
        private static bool m_bInitSDK = false;
        /// <summary>
        /// 海康预览数据回调
        /// </summary>
        private static CHCNetSDK.REALDATACALLBACK RealData = null;
        /// <summary>
        /// 海康预览集合
        /// </summary>
        private static Dictionary<string, Int32> realHandleDic = new Dictionary<string, Int32>();
        /// <summary>
        /// 海康录像集合
        /// </summary>
        private static Dictionary<string, bool> recordDic = new Dictionary<string, bool>();

/// <summary>
/// 海康录像机拍照
/// </summary>
/// <param name="channelNum">摄像机通道号</param>
/// <returns></returns>
public bool TakePhoto(C2SJsonMessage c2sjm)
{
    string channelNum = c2sjm.channelNum;
    string pictureFileName = c2sjm.pictureFileName;
    
    DateTime date = DateTime.Now;
    string year = date.Year.ToString() + "\\";
    string month = date.Month.ToString() + "\\";
    string day = date.Day.ToString() + "\\";

    bool flag = false;
    string sJpegPicDirectory = picPath + year + month + day;
    if (!Directory.Exists(sJpegPicDirectory))
    {
        Directory.CreateDirectory(sJpegPicDirectory);
    }
    //图片保存路径和文件名 C:\\HYKJ\\Pictures\\2019\\08\\08\\jylsh_jccs_hphm_channelNum_1.jpg
    string sJpegPicFileName = sJpegPicDirectory + pictureFileName;
    
    int lChannel = Int16.Parse(channelNum); //通道号 Channel number
    
    CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
    lpJpegPara.wPicQuality = 0; //图像质量 Image quality
    lpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档
    
    //JPEG抓图 Capture a JPEG picture
    if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
    {
        iLastErr = CHCNetSDK.NET_DVR_GetLastError();
        str = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
    }
    else
    {
        str = "Successful to capture the JPEG file and the saved file is " + sJpegPicFileName;
        flag = true;
    }
    return flag;
}

/// <summary>
/// 海康录像机开始录像
/// </summary>
/// <param name="sVideoFileName">录像保存路径和文件名</param>
/// <param name="channelNum">摄像机通道号</param>
/// <returns></returns>
public bool StartTakeVideo(C2SJsonMessage c2sjm)
{
    /**
     * 录像的前提是进行了预览,录像的流程应该是:
     *      1.开始预览
     *      2.开始录像
     *      3.结束录像
     *      4.停止预览
     * */
     
     string channelNum = c2sjm.channelNum;
     string videoFileName = c2sjm.videoFileName;
     
     DateTime date = DateTime.Now;
     string year = date.Year.ToString() + "\\";
     string month = date.Month.ToString() + "\\";
     string day = date.Day.ToString() + "\\";
     
     bool flag = false;
     string sVideoFiledDirectory = vidPath + year + month + day;
     if (!Directory.Exists(sVideoFiledDirectory))
     {
         Directory.CreateDirectory(sVideoFiledDirectory);
     }
     //录像保存路径和文件名 C:\\HYKJ\\Videos\\2019\\08\\08\\jylsh_jccs_hphm_channelNum.mp4
     string sVideoFileName = sVideoFiledDirectory + videoFileName;
     
     if (!recordDic.ContainsKey(channelNum))
     {
         //强制I帧 Make a I frame
         int lChannel = Int16.Parse(channelNum); //通道号 Channel number
         CHCNetSDK.NET_DVR_MakeKeyFrame(m_lUserID, lChannel);
         
         //开始录像 Start recording
         if (!CHCNetSDK.NET_DVR_SaveRealData(realHandleDic[channelNum], sVideoFileName))
         {
             iLastErr = CHCNetSDK.NET_DVR_GetLastError();
             str = "NET_DVR_SaveRealData failed, error code= " + iLastErr;
         }
         else
         {
             recordDic.Add(channelNum, true);
             flag = true;
         }
     }
     return flag;
}

/// <summary>
/// 海康录像机结束录像
/// </summary>
/// <param name="sVideoFileName">录像保存路径和文件名</param>
/// <param name="channelNum">摄像机通道号</param>
/// <returns></returns>
public bool StopTakeVideo(C2SJsonMessage c2sjm)
{
    string channelNum = c2sjm.channelNum;
    string videoFileName = c2sjm.videoFileName;
    
    DateTime date = DateTime.Now;
    string year = date.Year.ToString() + "\\";
    string month = date.Month.ToString() + "\\";
    string day = date.Day.ToString() + "\\";
    
    bool flag = false;
    string sVideoFiledDirectory = vidPath + year + month + day;
    if (!Directory.Exists(sVideoFiledDirectory))
    {
        Directory.CreateDirectory(sVideoFiledDirectory);
    }
    //录像保存路径和文件名 C:\\HYKJ\\Videos\\2019\\08\\08\\jylsh_jccs_hphm_channelNum.mp4
    string sVideoFileName = sVideoFiledDirectory + videoFileName;
    
    if (recordDic.ContainsKey(channelNum))
    {
        //停止录像 Stop recording
        if (!CHCNetSDK.NET_DVR_StopSaveRealData(realHandleDic[channelNum]))
        {
            iLastErr = CHCNetSDK.NET_DVR_GetLastError();
            str = "NET_DVR_StopSaveRealData failed, error code= " + iLastErr;
        }
        else
        {
            HKStopPreview(channelNum);//关闭预览
            str = "Successful to stop recording and the saved file is " + sVideoFileName;
            recordDic.Remove(channelNum);
            flag = true;
         }
    }
    return flag;
}

2.2.3 C2SJonsMessage

public class C2SJsonMessage
    {
        /// <summary>
        /// 接口id
        /// </summary>
        public string jkid;
        /// <summary>
        /// 检验机构编号
        /// </summary>
        public string jyjgbh;
        /// <summary>
        /// 检验流水号
        /// </summary>
        public string jylsh;
        /// <summary>
        /// 检测线代号
        /// </summary>
        public string jcxdh;
        /// <summary>
        /// 检测次数
        /// </summary>
        public string jccs;
        /// <summary>
        /// 号牌号码
        /// </summary>
        public string hphm;
        /// <summary>
        /// 号牌种类
        /// </summary>
        public string hpzl;
        /// <summary>
        /// 车辆识别代号
        /// </summary>
        public string clshbh;
        /// <summary>
        /// 检验项目
        /// </summary>
        public string jyxm;
        /// <summary>
        /// 海康录像机摄像机通道号
        /// </summary>
        public string channelNum;
        /// <summary>
        /// 同一个流水号和检测次数的检测记录调用接口的次数,主要给抓拍接口用,用于区分第几张抓拍图片
        /// </summary>
        public string cs;
        /// <summary>
        /// 图片文件名称,建议命名规则jylsh_jccs_hphm_channelNum_cs.jpg,且只能是jpg格式
        /// </summary>
        public string pictureFileName;
        /// <summary>
        /// 视频文件名称,建议命名规则jylsh_jccs_hphm_channelNum.mp4,且只能是mp4格式
        /// </summary>
        public string videoFileName;
    }

3.我的实例资源下载

有兴趣的可以看看,没兴趣的就算了,就是个小例子,反正也没什么技术含量

**下载连接地址:https://download.csdn.net/download/cgs_______/11517139 **

  • 1
    点赞
  • 11
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgsthtm

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值