海康网络相机封装库分享
前言
最近做项目过程中,使用到了海康相机,官方只提供了C/C++的SDK,没有搜寻到一个合适的封装了的C#库,故自己动手,简单的封装了一下,方便大家也方便自己使用和二次开发
项目地址:https://github.com/martixjohn/HikvisionNetworkCameraSdkForCsharp
项目结构
├─Dlls/
│
├─Native/
│ HCNetSDK.cs
│
├─ CameraDevice.cs
│
...
项目很简单,主要就提供了两个类:
-
一个是CameraDevice.cs:相机API使用
主要接口和成员如图
-
HCNetSDK.cs:对C++的头文件的封装,包含常用的类型的声明等
(由官方提供的Demo进行修改,并小修小补,修复了部分Bug)
使用
拷贝动态链接库DLL
拷贝动态链接库到程序目录,或者程序能访问到的地方,内部运行时自动链接
这里有个巧妙地办法:使用环境变量
string originalPath = Environment.GetEnvironmentVariable("Path") ?? string.Empty;
originalPath = Regex.Replace(originalPath, "^" + Path.PathSeparator, string.Empty);
// 加入当前目录的bin
Environment.SetEnvironmentVariable("PATH", "bin" + Path.PathSeparator + originalPath);
重点在Environment.SetEnvironmentVariable("PATH", ...)
,因为程序一般运行都会访问PATH环境变量
示例
// 初始化相机SDK,涉及非托管内存分配
CameraDevice.InitializeSdk();
string userName = "admin";
string password = "password";
string iP = "192.168.18.1";
ushort port = 8000;
// CameraDevice实现了IDisposable
using(CameraDevice camera = new(userName, password, iP, port)){
try{
// 需要登录才能使用, 阻塞
camera.Login();
Console.WriteLine("登录成功! {0}", camera.UserName);
} catch (Exception e) {
Console.WriteLine("exception: {0}", e);
return;
}
try{
// 直接从流中获取图片
byte[] image = camera.DirectlyCaptureJpegImage();
// ImageSharp
Image<Rgb24> rgb24 = Image.Load<Rgb24>(image);
// ...
} catch(Exception e){
Console.WriteLine("exception: {0}", e);
return;
}
// 自己处理流数据 (使用回调,非阻塞)
camera.StartFetchVideoStream((streamType, data) => {
if(streamType == StreamType.Header) {
// ...
} else if(streamType == StreamType.Body) {
// ...
}
});
// 模拟进行其他任务
Stopwatch stopwatch = Stopwatch.StartNew();
while (stopwatch.ElapsedMilliseconds < 3000)
{
// ...
}
}
// 程序运行结束,销毁SDK资源(非托管)
CameraDevice.CleanUpSdk();
结束语
项目很简单,依然有不足,大家可能还是需要根据具体业务进行二次开发来。
总之欢迎大家使用,若感兴趣欢迎参与贡献!
感谢你的阅读,觉得不错麻烦帮忙点个小小的推荐吧😘
本文来自博客园,作者:学习新知识的小白白,转载请注明原文链接:https://www.cnblogs.com/onecainiao/p/18357459
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章