
简介海康威视摄像头OCX控件开发包为需要在Windows桌面应用中集成海康设备视频能力的开发人员提供一站式解决方案适用于C#、VB、组态王等常见环境。压缩包共37个文件核心包含NetVideoActiveX23.ocx控件、HCNetSDK.dll与PlayCtrl.dll等动态库、注册与卸载批处理、cab安装包以及OCX控件接口说明文档整体21.34MB便于快速部署与二次开发。该资源已有4708人学习下载。开发包附带NetVideoActiveX23开发包V2.3.23.9及演示程序配合《OCX控件接口说明(V2.3).doc》可完成控件注册、实例创建、初始化、实时预览、抓图与本地保存等关键操作同时提供D3DX9_43.dll、OpenAL32.dll等运行依赖减少环境配置障碍。适合有摄像头接入需求的安防、物联网项目开发者直接参考使用。 海康威视摄像头在不少老项目里都会碰到一个绕不开的东西OCX控件。做安防集成、Web二次开发、或者维护前几年留下来的监控平台基本都逃不过它。这个控件的价值很直接——它能让你在网页里打开摄像头实时视频、做抓图、录像、云台控制不用装独立的客户端浏览器打开就能看。直到现在还有大量学校、园区、工厂的监控系统跑的是这套架构。这篇文章写给正在接海康设备、需要做Web端预览和控制的开发者也写给那些被“控件装不上、页面黑屏、IE白屏”折磨的运维朋友。我会把OCX控件的原理、环境配置、页面集成、常见坑一次讲清楚基于我实际做项目时踩过的经验来写尽量做到看完就能上手。1. 这个控件到底解决什么问题1.1 为什么海康要出OCX早些年浏览器能力很弱HTML本身不支持直接解码H.264/H.265视频流。摄像头取流走的是RTSP协议浏览器解析不了RTSP更不可能自己解码视频流并显示在网页里。于是海康这种设备厂商就提供了一款ActiveX控件把“拉流、解码、渲染”这套底层能力打包成浏览器可以调用的本地组件。ActiveX是微软的老技术专属于IE浏览器。网页通过一行object标签声明控件浏览器检查到系统里有这个控件就会加载它然后网页里的JavaScript就能调用它对外暴露的方法。调用后控件自己负责连接摄像头的视频流通道完成解码和画面显示网页只管传参数、发指令、接收事件。1.2 一图看懂它的工作流程没有图表工具的时候我口头描述一下流程浏览器页面加载object标签触发控件初始化JavaScript获取控件对象然后调用登录接口传入设备IP、端口、用户名、密码登录成功后调用预览接口传入视频通道号、码流类型控件建立与摄像头的连接拿到视频流后解码渲染到页面指定的窗口区域。整个过程里页面自身不碰视频流数据只和控件的逻辑交互。这个过程很像一个“遥控器电视机”的组合。网页是遥控器控件就是塞在网页里的电视机。你按按钮电视机自己去调台、放画面遥控器只管发指令。1.3 什么场景必须用它现在的海康新架构推荐用无插件H5方案但这仅限于新设备和新的综合安防平台。老设备、老平台、旧的项目架构OCX依然是唯一选择。归纳起来必须用的场景大概有这些在IE浏览器或基于IE内核的国产浏览器中对接老款设备通过海康HCNetSDK整套Web开发包搭建的B/S监控页面老版综合安防管理平台的网页访问端公安、教育、园区等已稳定运行多年的旧系统改造预算有限不能推倒重来搞清楚这个前提很重要。很多人一上来就吐槽“都什么年代了还用OCX”但现实是存量系统就长这样你会它、能维护它在项目里就很管用。2. 环境准备与安装实操2.1 浏览器安全设置四个必改项OCX跑不起来的第一个拦路虎就是IE安全策略。很多报错说“控件不能装载”或者“页面无法显示”其实不是控件坏了是浏览器根本没允许它运行。需要做的事情按顺序来打开IE浏览器的“Internet选项”切到“安全”选项卡选中“受信任的站点”点击“站点”按钮把页面的IP或域名添加进去在这个区域下方点击“自定义级别”找到“ActiveX控件和插件”分类把以下四个选项全部改成“启用”或者“提示”对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本这个尤其重要二进制和脚本行为下载未签名的ActiveX控件运行ActiveX控件和插件安全设置改完后关闭浏览器再重新打开页面。别嫌麻烦这是OCX调试里最高频的一步。如果是在Chrome里看不了直接改用IE或者用360浏览器、搜狗浏览器切到兼容模式本质还是IE内核。2.2 控件安装的两种方式海康OCX控件的分发形式一般有两种一种是网页里的CAB自动安装包一种是独立压缩包里的DLL文件手动注册。自动安装方式最常见。页面里有一段codebase声明IE打开页面时会检查本地是否已注册对应CLSID如果没有就从指定的cab路径下载并执行安装。这里有个前提浏览器不能拦截ActiveX安装提示且用户有本地管理员权限。很多内网环境把下载权限限制得很严IE下载控件时就静默失败了。手动注册适合排查问题。拿到DLL文件后在命令行里执行regsvr32 控件路径\PlayCtrl.dll执行成功会弹出一个注册成功的提示框。如果提示模块加载失败优先检查VC运行库是否安装、DLL文件是否被杀毒软件隔离。2.3 64位系统上的注册坑现在操作系统基本都是64位但海康OCX控件大多是32位组件。这个差异坑了很多人。64位系统上有两个系统目录C:\Windows\System32 存放64位DLLC:\Windows\SysWOW64 存放32位DLLregsvr32默认调用的是System32里的版本注册64位视角。如果拿32位的OCX去这里注册会报错或者说注册了但浏览器加载不了。正确做法是手动指定32位注册工具C:\Windows\SysWOW64\regsvr32.exe C:\路径\PlayCtrl.dll同时IE浏览器也得用32位版本。打开IE在“帮助”里选择“关于Internet Explorer”能看到位数。很多优化版系统默认让64位IE做默认浏览器加载32位OCX时就会出现“对象不支持此操作”。注意如果页面在64位IE里偶尔能打开但功能异常大概率也是位数不匹配。排查时统一使用32位IE能少走一大半弯路。3. 页面集成与二次开发要点3.1 用object标签嵌入控件OCX控件的页面嵌入写法非常固定核心就是object标签里的classid。海康Web开发包提供的控件CLSID在开发手册里有各版本大同小异。我把经典写法放出来object idhkPlayerCtrl classidclsid:7830AEE2-7C17-4B54-A660-28E96B9C6B3F codebasecab/WebVideoActiveX.cab#version1,0,0,1 width640 height480 /objectclassid就是操作系统注册表里标识这个控件的唯一IDcodebase指明了如果本机没有控件去哪个URL下载安装包。width和height决定视频显示区域大小。页面里可能会有多个窗口比如调一个1画面、一个4画面甚至16画面的大屏。这种就放多个object对象每个给不同的id比如hkPlayerCtrl1、hkPlayerCtrl2后续JavaScript分别操作它们。3.2 初始化、登录、预览三步走拿到控件对象之后后续逻辑固定是三步初始化、登录、预览。我用JavaScript写个完整的例子这是实际项目中抽出来的核心结构var player document.getElementById(hkPlayerCtrl); // 第一步初始化控件 player.Init(); // 第二步连接设备 player.SetDeviceInfo(0, 192.168.1.64, 8000, admin, password123); // 第三步开始实时预览 player.StartRealPlay(0, 1); // 第一个参数是窗口索引第二个是通道号SetDeviceInfo里端口默认是8000这是海康设备SDK的通信端口注意别和RTSP的554端口搞混。8000负责登录、控制信令554负责视频流传输。停止预览就调用StopRealPlay页面卸载时还要调用DeInit避免控件残留占用设备连接资源。进阶操作也很直观。抓图是CapturePicture(0, path)保存的路径要在本机有写权限。云台控制是PTZControl(0, direction, speed, 0)direction里有上下左右的预设值。3.3 老式OCX方案和新式Web SDK的取舍新项目再让我从头做Web视频监控我不会直接上OCX因为现在浏览器兼容性要求太高Chrome和Edge都不支持ActiveX了。海康已经提供了无插件方案基于WebSocketH5的视频流播放组件新平台、新设备都支持。如果设备不支持新版协议或者项目预算不允许换平台可以用一套过渡方案后端加一台流媒体服务器拉取摄像头RTSP流转成WebRTC或HLS流前端用video标签直接播放。这样做的好处是彻底摆脱IE兼容性限制手机和电脑都能看。但这个方案也有代价需要额外的转码服务器资源延迟会比OCX方案高项目周期也相应变长。所以实事求是地说怎么选还是看项目现状项目类型推荐方案理由老系统维护、模块追加继续用OCX改动最小不影响存量功能新项目、设备较新Web SDK无插件浏览器兼容性最好新项目、设备老旧流媒体转码保留旧设备同时解决浏览器问题大规模并发访问流媒体服务器架构避免大量客户端直连设备4. 常见问题与排查技巧实录4.1 最常见的“控件不能装载”三层排查这是个让无数人头疼的报错报错文字一般是“不能装载文档控件请在检查浏览器的选项中检查浏览器的安全设置”。我按排查顺序整理一套方法第一层确认控件DLL已注册。在IE里打开“管理加载项”找到海康相关控件名称查看状态是否为“已启用”。找不到就是没注册成功。第二层确认浏览器安全设置。回到第2.1节的清单重点看“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”是否启用这一项是默认拒绝的最容易出问题。同时确认项目网站IP已经加入“受信任的站点”。第三层确认当前浏览器内核。点了这个IP如果在Edge或Chrome里直接被屏蔽那就换IE或兼容模式浏览器这个问题不是控件注册能解决的。我遇到过一个特别隐蔽的场景某台电脑控件装了、安全设置改了、IE也是32位页面还是报这个错。最后发现是这台电脑的IE被组策略禁用了ActiveX运行管理员权限下运行gpedit.msc进到“计算机配置-管理模板-Windows组件-Internet Explorer”把ActiveX相关策略全部改回“未配置”问题解决。4.2 页面能打开但画面一直黑屏黑屏属于控件加载成功但没取到流的典型表现。优先做三个检查第一在服务器或笔记本上用VLC直接拉流验证设备是否在线。VLC打开网络流输入rtsp://用户名:密码IP:554/Streaming/Channels/101。能出画面说明摄像头本身没问题问题出在页面代码或网络链路。第二检查页面代码里调用的端口。很多人在SetDeviceInfo里把端口写成80或者554但海康设备默认SDK命令端口是8000取流端口是554两个都要对应正确。第三检查通道号和码流类型。海康设备的通道号从1开始码流类型主码流是1子码流是2。预览接口里通道号写对画面才会出。曾遇到过一个现场页面预览写的是101通道因为设备扩展通道多实际对应的物理通道根本不是这个折腾了半天才发现是通道映射问题。4.3 多路预览内存持续上涨OCX控件做多路预览时会遇到内存泄漏问题尤其在长时间挂机的场景里。打开网页看着任务管理器里进程内存一路涨过几个小时页面就开始卡死。核心原因是预览结束后没有正确释放控件资源。页面里如果有“退出预览”功能要同时调用StopRealPlay页面关闭时还要调用DeInit。这两个方法缺一个设备端连接和本地解码缓冲区就会残留内存就是这样一点点涨上去的。我后来总结了一套标准释放逻辑window.onunload function() { for (var i 0; i maxScreen; i) { player.StopRealPlay(i); } player.DeInit(); }另外要注意频繁重新播放同一个通道时尽量复用同一个预览窗口不要反复New控件对象。控件实例创建和销毁的开销非常大也是一种常见的临时对象堆积。4.4 摄像头时间不准的在线处理有些项目会直接通过网页控件去同步摄像头时间。OCX控件本身提供了TimeSetting接口需要先用管理员账号登录然后调用player.SetDVRTime(0, year, month, day, hour, minute, second);这个接口对老设备比较常用。新设备建议在设备自身的NTP设置里统一配置时间服务器所有设备自动同步精确度比网页手动设置要高。如果设备分散在多网段网页访问不到更得依靠NTP方案。5. 一些实操上的补充建议开发环境里调试OCX页面时建议单独准备一台装了32位IE的Windows虚拟机专用于测试控件兼容性。这样既不用来回改本机的安全设置也能模拟真实用户环境排查问题效率高很多。线上生产环境的浏览器建议锁定IE11版本。太老版本的IE对ActiveX支持有缺陷而IE11已经是最成熟的IE版本配合加固后的安全配置稳定性最好。如果遇到了某些网页功能在IE11下反而异常可以按F12打开开发者工具把浏览器模式切到“Edge”或“IE10”做兼容性测试但一般不建议这么做能用默认模式就不乱切。文档方面海康的“设备网络SDK开发手册”和“Web开发控件API说明”是两本核心资料和OCX相关的内容基本都在Web开发控件API说明里。做二次开发的前提就是把这本手册的接口列表过一遍哪些是登录相关、哪些是预览相关、哪些是云台控制心里有数就行。注意海康官方文档更新频繁不同版本的接口名可能会有细微差异以你拿到的SDK包里自带的帮助文档为准。网上流传的老版接口不一定适配你手里的设备版本。这套东西看着老但涉及的知识点其实很完整ActiveX技术原理、浏览器安全机制、流媒体取流过程、Windows组件注册哪一块都是能深挖的。搞懂OCX控件的来龙去脉等于同时理解了老一代B/S监控系统的完整链路。新项目虽然多半不再用它但只要有老系统在跑这个技能就不会过时。本文还有配套的精品资源点击获取