开发者社区> shy丶gril> 正文

C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览

简介:
+关注继续查看

前言

  一直没有稳定的DVS供我测试用,朋友那边也是频频宕掉,所以延误至今,所幸还是出来了。此外非常遗憾的是没能用WPF实践成功,关键是IntPtr句柄设置不对,没法显示出来,为了保证进度也只好暂时放弃用WPF做显示。

 

提醒
欢迎转载,但请保留博客园(www.cnblogs.com)、农民伯伯(over140.cnblogs.com)的出处,谢谢合作:)

系列
1.  C# 海康DVR客户端开发系列(1)—— 准备
2.  C# 海康DVR客户端开发系列(2)—— 封装API 
3.  C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览


正文

  一、截图

   

  二、代码

复制代码
        #region Member Variable

        
//登录标识
        private int lUserID = -1;
        
//预览标识
        private int lRealHandle = -1;

        
#endregion

        
#region Form

        
public frmMain()
        {
            InitializeComponent();
        }

        
private void frmMain_Load(object sender, EventArgs e)
        {
            HCNetSDK.NET_DVR_Init();
            HCNetSDK.NET_DVR_SetConnectTime(
50001);
        }

        
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            HCNetSDK.NET_DVR_Cleanup();
        }

        
#endregion

        
#region 功能

        
/// <summary>
        
/// 登录DVS并预览
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnOpen_Click(object sender, EventArgs e)
        {
            
#region New V30
            NET_DVR_DEVICEINFO_V30 dev 
= new NET_DVR_DEVICEINFO_V30();
            lUserID 
= HCNetSDK.NET_DVR_Login_V30("192.168.1.1"8000"admin""12345"out dev);
            
if (lUserID == -1)
            {
                MessageBox.Show(
string.Format("登录DVS失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()), "登录DVS失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
return;
            }

            NET_DVR_CLIENTINFO clientinfo 
= new NET_DVR_CLIENTINFO();
            clientinfo.hPlayWnd 
= this.panel1.Handle;//视频窗口
            clientinfo.lChannel = 2// 通道号
            clientinfo.lLinkMode = 0;
            clientinfo.sMultiCastIP 
= "234.5.6.7";

            lRealHandle 
= HCNetSDK.NET_DVR_RealPlay_V30(lUserID, ref clientinfo, null1false);
            
if (lRealHandle == -1)
            {
                MessageBox.Show(
string.Format("播放失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()));
                
return;
            }
            
#endregion
            
#region Old
            
//NET_DVR_DEVICEINFO dev = new NET_DVR_DEVICEINFO();
            
//lUserID = HCNetSDK.NET_DVR_Login("125.119.30.175", 8000, "admin", "12345", out dev);
            
//if (lUserID == -1)
            
//{
            
//    MessageBox.Show(string.Format("登录DVS失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()), "登录DVS失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            
//    return;
            
//}

            
//NET_DVR_CLIENTINFO clientinfo = new NET_DVR_CLIENTINFO();
            
//clientinfo.hPlayWnd = this.panel1.Handle;//视频窗口
            
//clientinfo.lChannel = 2; // 通道号
            
//clientinfo.lLinkMode = 0;
            
//clientinfo.sMultiCastIP = "234.5.6.7";

            
//lRealHandle = HCNetSDK.NET_DVR_RealPlay(lUserID, ref clientinfo);
            
//if (lRealHandle == -1)
            
//{
            
//    MessageBox.Show(string.Format("播放失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()));
            
//    return;
            
//}
            #endregion
        }

        
/// <summary>
        
/// 停止预览并退出登录
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnClose_Click(object sender, EventArgs e)
        {
            HCNetSDK.NET_DVR_StopRealPlay(lRealHandle);

            
#region New V30
            HCNetSDK.NET_DVR_Logout_V30(lUserID);
            
#endregion
            
#region Old
            
//如果不退出登录,下次开启拾音将失效
            
//HCNetSDK.NET_DVR_Logout(lUserID);
            #endregion

            
this.panel1.Invalidate(false);
        }

        
#endregion
复制代码

    代码说明:

      1.  [#region New]与[#region Old]代码块分别是新旧版本的API,这里均测试通过。

      2.  需要把HCNetSDK.dll(这里事例使用版本为3.0.3.3)直接拷贝到bin\Debug下去,或者拷贝到项目工程根目录下,然后选中右键属性->复制到输出目录 选中始终复活或者如果较新则复制,重新编译即可。

 

  三、提醒

    提醒大家API有变动,请立即更新!

 

  五、后期维护 

    1.  2009-11-2

      也需要把PlayCtrl.dll加到的项目中来,否则可能出现登录成功,播放报错,显示错误代码64。

 

结束语
困难重重,坚持做伴。


转自:http://www.cnblogs.com/over140/archive/2009/10/31/1588343.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
超详细的《防疫健康管理软件》开发报告奉上!【文末获取完整源码】
超详细的《防疫健康管理软件》开发报告奉上!【文末获取完整源码】
14 0
时光转眼即逝,半年过来了我们收获了啥?
时光匆匆!转眼间半年过来了。有人碌碌无为,有人忙忙碌碌,有人学到了职场经验,有人学到了一线前沿技术,有人拿到了半年的工资。总之每个人有每个人的生活方式,我们不妄加评判。这里讲述一下自己吧。
5 0
C#请求JavaAPI接口安全校验流程【线下系统定制】(精简版)
我始终相信,分享的越多收获的就越多!所以这里把我最近几天钻研的项目安全校验机制流程实现与细节分享给大家!
5 0
C# 委托的实战应用
个人感觉既然是新手接触委托 肯定不喜欢一大串的概念 直接上写法吧 概念问题百度搜一下 大面积雷同随便看 但是写法你们要慎重选择学习
6 0
C# Lambda的简单应用的记录
在C#的List集合中,我们时常需要使用到大量的运算或者筛选等操作,按常规的方式无非就是利用foreach或者for对List集合进行循环操作,最后运算出结果。此种方法往往需要写多行语句,阅读性稍微差点,而Lambda表达式一条语句完成。
5 0
iOS逆向-day6:最新的 theos 使用
iOS逆向-day6:最新的 theos 使用
10 0
一文搞定SonarQube接入C#(.NET)代码质量分析
一文搞定SonarQube接入C#(.NET)代码质量分析
43 0
librosa音频处理教程
librosa音频处理教程
11 0
+关注
1878
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载