-
Available as nuget
-
dotnet add package Hik.Api
-
Wrapper over Hikvision SDK version 5.3.6.30 x64. It allows login, fetch files list (videos and photos), download files, get config list and more.
-
Or just run console app sample
Initialization (static)
HikApi.Initialize();
Login (static). Returns HikApi
var hikApi = HikApi.Login("192.168.1.64", 8000, "admin", "password");
Logout
hikApi.Logout();
Cleanup (static)
HikApi.Cleanup();
Print list of IP channels for NVR (IP Camera use session.Device.DefaultIpChannel)
foreach (var channel in hikApi.IpChannels)
{
Console.WriteLine($"{channel.Name} {channel.ChannelNumber}; IsOnline : {channel.IsOnline};");
}
Get SD Card info, capacity, free space, status etc. Returns HdInfo
var info = hikApi.ConfigService.GetHddStatus();
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(info));
Get device config. Returns DeviceConfig
var device = hikApi.ConfigService.GetDeviceConfig();
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(config));
Get network config. Returns NetworkConfig
var network = hikApi.ConfigService.GetNetworkConfig();
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(network));
Get device current time
var cameraTime = hikApi.ConfigService.GetTime();
Console.WriteLine($"Camera time :{cameraTime}");
Set device time
var currentTime = DateTime.Now;
hikApi.ConfigService.SetTime(currentTime);
Get photos list from IP Camera (default IP channel). Returns IReadOnlyCollection<HikRemoteFile>
//Get photos files for last 24 hours
DateTime fromPeriod = DateTime.Now.AddHours(-24);
DateTime toPeriod = DateTime.Now;
var photos = await hikApi.PhotoService.FindFilesAsync(fromPeriod, toPeriod);
Get photos list from specific IP channel.
int channel = 2;
var photos = await hikApi.PhotoService.FindFilesAsync(fromPeriod, toPeriod, channel);
Download photos
foreach (var photo in photos)
{
hikApi.PhotoService.DownloadFile(
photo.Name,
photo.Size,
photo.ToPhotoFileNameString());
}
or
hikApi.PhotoService.DownloadFile(photo, photo.ToPhotoFileNameString());
Get videos list from IP Camera (default IP channel). Returns IReadOnlyCollection<HikRemoteFile>
var videos = await hikApi.VideoService.FindFilesAsync(fromPeriod, toPeriod);
Get videos list from IP Camera (specific IP channel)
int channel = 2;
var videos = await hikApi.VideoService.FindFilesAsync(fromPeriod, toPeriod, channel);
Download video
foreach (var video in videos)
{
Console.WriteLine($"Downloading {video.ToVideoFileNameString()}");
var downloadId = hikApi.VideoService.StartDownloadFile(
video.Name,
video.ToVideoFileNameString());
do
{
await Task.Delay(5000); // check progress every 5 sec
int progress = hikApi.VideoService.GetDownloadPosition(downloadId);
if (progress == 100)
{
hikApi.VideoService.StopDownloadFile(downloadId);
break;
}
else if (progress < 0 || progress > 100)
{
throw new Exception($"Get progress failed, value = {downloadProgress}");
}
}
while (true);
}
Start live preview without callback
int channel = 2;
var playbackId = hikApi.PlaybackService.StartPlayBack(channel);
or start live view to WinForm PictureBox
int channel = 2;
System.Windows.Forms.PictureBox pctBox = new System.Windows.Forms.PictureBox();
var playbackId = hikApi.PlaybackService.StartPlayBack(channel, pctBox.Handle);
Start recording live stream to filePath in .mp4 format (need start playback first)
int channel = 2;
hikApi.PlaybackService.StartRecording(
playbackId,
"filePath.mp4",
channel);
Stop recording live stream to filePath
hikApi.PlaybackService.StopRecording(playbackId);
Stop real play
hikApi.PlaybackService.StopPlayBack(playbackId);