日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 视频监控系列(7):服务器端——封装API(下)(1)

發(fā)布時(shí)間:2025/3/20 C# 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 视频监控系列(7):服务器端——封装API(下)(1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

????? 寫系列文章的時(shí)候[前言]部分變得無言了,可能來得順利了點(diǎn)吧: ) 本章中提供的封裝均是我用笨辦法從<<Hikvision 板卡網(wǎng)絡(luò)開發(fā)包編程手冊(cè)V4.7>>和<<DS-4000HC、HCS、HC+、HF、HS、MD卡的Windows編程指南V4.3>>中拷貝出來并參照VC++代碼進(jìn)行整理的,主要是針對(duì)HikServer.dll和DS40xxSDK.dll的調(diào)用封裝。

?

注意

?????本系列文章限于學(xué)習(xí)交流,注重過程,由于涉及公司,所以不提供源代碼下載,非常抱歉!!但是請(qǐng)大家放心,核心、實(shí)現(xiàn)以及其他能夠貼出來的代碼我都會(huì)貼出來,并且爭(zhēng)取盡所能的回答留言里的每一個(gè)問題,感謝大家關(guān)注,歡迎交流 :)

?

系列

???1.?????C# 視頻監(jiān)控系列(1):準(zhǔn)備

?????2.?????C# 視頻監(jiān)控系列(2):客戶端——封裝API

?????3.?????C# 視頻監(jiān)控系列(3):客戶端——連接服務(wù)器

?????4.?????C# 視頻監(jiān)控系列(4):客戶端——音頻接收和抓圖

?????5.?????C# 視頻監(jiān)控系列(5):客戶端——給服務(wù)器端發(fā)送字符串和錄像(數(shù)據(jù)捕獲)

?????6.?????C# 視頻監(jiān)控系列(6):服務(wù)器端——封裝API(上) [HikServer.dll]

?????7.?????C# 視頻監(jiān)控系列(7):服務(wù)器端——封裝API(下) [DS40xxSDK.dll]

?

正文

?????1.?????DS40xxSDK.dll

?

using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Runtime.InteropServices;
using?System.Drawing;

namespace?HikServer.DS40xxSDK
{
????
#region?enum

????
///?<summary>
????
///?板卡類型
????
///?</summary>
????public?enum?BOARD_TYPE_DS?:?uint
????{
????????DS400XM?
=?0,????????//M卡
????????DS400XH?=?1,????????//H卡
????????DS4004HC?=?2,????????//4004HC
????????DS4008HC?=?3,????????//4008HC
????????DS4016HC?=?4,????????//4016HC
????????DS4001HF?=?5,????????//4001HF
????????DS4004HF?=?6,????????//4004HF
????????DS4002MD?=?7,????????//4002MD
????????DS4004MD?=?8,????????//4004MD
????????DS4016HCS?=?9,????????//4016HCS
????????DS4002HT?=?10,????//4002HT
????????DS4004HT?=?11,????//4004HT
????????DS4008HT?=?12,????//4008HT
????????DS4004HC_PLUS?=?13,????//4004HC+
????????DS4008HC_PLUS?=?14,????//4008HC+
????????DS4016HC_PLUS?=?15,????//4016HC+
????????DS4008HF?=?16,????//4008HF
????????DS4008MD?=?17,????//4008MD
????????DS4008HS?=?18,????//4008HS
????????DS4016HS?=?19,????//4016HS
????????INVALID_BOARD_TYPE?=?0xffffffff,
????}

????
///?<summary>
????
///?視頻預(yù)覽格式
????
///?</summary>
????public?enum?TypeVideoFormat
????{
????????vdfRGB8A_233?
=?0x00000001,
????????vdfRGB8R_332?
=?0x00000002,
????????vdfRGB15Alpha?
=?0x00000004,
????????
///?<summary>
????????
///?16位RGB視頻壓縮格式
????????
///?</summary>
????????vdfRGB16?=?0x00000008,
????????
///?<summary>
????????
///?24位RGB視頻壓縮格式
????????
///?</summary>
????????vdfRGB24?=?0x00000010,
????????vdfRGB24Alpha?
=?0x00000020,

????????vdfYUV420Planar?
=?0x00000040,
????????
///?<summary>
????????
///?YUV422視頻壓縮格式
????????
///?</summary>
????????vdfYUV422Planar?=?0x00000080,
????????vdfYUV411Planar?
=?0x00000100,
????????vdfYUV420Interspersed?
=?0x00000200,
????????vdfYUV422Interspersed?
=?0x00000400,
????????vdfYUV411Interspersed?
=?0x00000800,
????????vdfYUV422Sequence?
=?0x00001000,???/*?U0,?Y0,?V0,?Y1:??For?VO?overlay?*/
????????vdfYUV422SequenceAlpha?
=?0x00002000,
????????
/*?U0,?Y0,?V0,?Y1:??For?VO?overlay,?with?low?bit?for?alpha?blending?*/
????????vdfMono?
=?0x00004000,??/*?8?bit?monochrome?*/

????????vdfYUV444Planar?
=?0x00008000,
????};

????
///?<summary>
????
///?視頻制式
????
///?</summary>
????public?enum?VideoStandard_t?:?uint
????{
????????
///?<summary>
????????
///?無視頻信號(hào)
????????
///?</summary>
????????StandardNone?=?0x80000000,
????????
///?<summary>
????????
///?NTSC制式
????????
///?</summary>
????????StandardNTSC?=?0x00000001,
????????
///?<summary>
????????
///?PAL制式
????????
///?</summary>
????????StandardPAL?=?0x00000002,
????????StandardSECAM?
=?0x00000004,
????}?;

????
///?<summary>
????
///?編碼圖像分辨率
????
///?</summary>
????public?enum?PictureFormat_t
????{
????????ENC_CIF_FORMAT?
=?0,
????????ENC_QCIF_FORMAT?
=?1,
????????ENC_2CIF_FORMAT?
=?2,
????????ENC_4CIF_FORMAT?
=?3,
????????ENC_QQCIF_FORMAT?
=?4,
????????ENC_CIFQCIF_FORMAT?
=?5,
????????ENC_CIFQQCIF_FORMAT?
=?6,
????????ENC_DCIF_FORMAT?
=?7
????};

????
///?<summary>
????
///?碼流控制方式
????
///?</summary>
????public?enum?BitrateControlType_t
????{
????????
///?<summary>
????????
///?變碼率
????????
///?</summary>
????????brCBR?=?0,
????????
///?<summary>
????????
///?恒定碼率
????????
///?</summary>
????????brVBR?=?1,
????};

????
public?enum?FrameType_t
????{
????????PktError?
=?0,
????????PktIFrames?
=?0x0001,
????????PktPFrames?
=?0x0002,
????????PktBBPFrames?
=?0x0004,
????????PktAudioFrames?
=?0x0008,
????????PktMotionDetection?
=?0x00010,
????????PktDspStatus?
=?0x00020,
????????PktOrigImage?
=?0x00040,
????????PktSysHeader?
=?0x00080,
????????PktBPFrames?
=?0x00100,
????????PktSFrames?
=?0x00200,
????????PktSubIFrames?
=?0x00400,
????????PktSubPFrames?
=?0x00800,
????????PktSubBBPFrames?
=?0x01000,
????????PktSubSysHeader?
=?0x02000
????};

????
#endregion

????
#region?struct

????
///?<summary>
????
///?板卡信息結(jié)構(gòu)體?
????
///?</summary>
????public?struct?DS_BOARD_DETAIL
????{
????????
///?<summary>
????????
///?板卡類型
????????
///?</summary>
????????BOARD_TYPE_DS?type;
????????
///?<summary>
????????
///?序列號(hào)
????????
///?BYTE?sn[16];????????
????????
///?</summary>
????????[MarshalAs(UnmanagedType.ByValArray,?SizeConst?=?16)]
????????
byte[]?sn;
????????
///?<summary>
????????
///?板卡包含的DSP個(gè)數(shù)
????????
///?</summary>
????????uint?dspCount;
????????
///?<summary>
????????
///?板卡上第一個(gè)DSP的索引
????????
///?</summary>
????????uint?firstDspIndex;
????????
///?<summary>
????????
///?板卡包含的編碼通道個(gè)數(shù)
????????
///?</summary>
????????uint?encodeChannelCount;
????????
///?<summary>
????????
///?板卡上第一個(gè)編碼通道的索引
????????
///?</summary>
????????uint?firstEncodeChannelIndex;
????????
///?<summary>
????????
///?板卡包含的解碼通道個(gè)數(shù)
????????
///?</summary>
????????uint?decodeChannelCount;
????????
///?<summary>
????????
///?板卡上第一個(gè)解碼通道的索引
????????
///?</summary>
????????uint?firstDecodeChannelIndex;
????????
///?<summary>
????????
///?板卡包含的視頻輸出通道個(gè)數(shù)
????????
///?</summary>
????????uint?displayChannelCount;
????????
///?<summary>
????????
///?板卡上第一個(gè)視頻輸出通道的索引
????????
///?</summary>
????????uint?firstDisplayChannelIndex;
????????
uint?reserved1;
????????
uint?reserved2;
????????
uint?reserved3;
????????
///?<summary>
????????
///?硬件版本,format:major.minor.build,major:bit?16-19,minor:?bit?8-15,build:?bit?0-7
????????
///?</summary>
????????uint?version;
????}

????
///?<summary>
????
///?DSP信息結(jié)構(gòu)體?
????
///?</summary>
????public?struct?DSP_DETAIL
????{
????????
///?<summary>
????????
///?此DSP所包含的編碼通道個(gè)數(shù)
????????
///?</summary>
????????uint?encodeChannelCount;
????????
///?<summary>
????????
///?此DSP上第一個(gè)編碼通道在所有編碼通道中的索引
????????
///?</summary>
????????uint?firstEncodeChannelIndex;
????????
///?<summary>
????????
///?此DSP所包含的解碼通道個(gè)數(shù)
????????
///?</summary>
????????uint?decodeChannelCount;
????????
///?<summary>
????????
///?此DSP上第一個(gè)解碼通道在所有解碼通道中的索引
????????
///?</summary>
????????uint?firstDecodeChannelIndex;
????????
///?<summary>
????????
///?此DSP包含的顯示通道個(gè)數(shù)
????????
///?</summary>
????????uint?displayChannelCount;
????????
///?<summary>
????????
///?此DSP上第一個(gè)顯示通道在所有顯示通道中的索引
????????
///?</summary>
????????uint?firstDisplayChannelIndex;
????????
uint?reserved1;
????????
uint?reserved2;
????????
uint?reserved3;
????????
uint?reserved4;
????}

????
///?<summary>
????
///?特殊功能結(jié)構(gòu)體
????
///?</summary>
????public?struct?CHANNEL_CAPABILITY
????{
????????
///?<summary>
????????
///?音頻預(yù)覽
????????
///?</summary>
????????byte[]?bAudioPreview;
????????
///?<summary>
????????
///?報(bào)警信號(hào)
????????
///?</summary>
????????byte[]?bAlarmIO;
????????
///?<summary>
????????
///?看家狗
????????
///?</summary>
????????byte[]?bWatchDog;
????}

????
///?<summary>
????
///?版本信息
????
///?</summary>
????public?struct?PVERSION_INFO
????{
????????
///?<summary>
????????
///?DSP版本號(hào),DSP的BUILD號(hào),用于軟件升級(jí)時(shí)標(biāo)明該版本的最后修改時(shí)間?
????????
///?</summary>
????????ulong?DspVersion,?DspBuildNum;
????????
///?<summary>
????????
///?Driver版本號(hào),Driver的BUILD號(hào),用于軟件升級(jí)時(shí)標(biāo)明該版本的最后修改時(shí)間?
????????
///?</summary>
????????ulong?DriverVersion,?DriverBuildNum;
????????
///?<summary>
????????
///?SDK版本號(hào),SDK的BUILD號(hào),用于軟件升級(jí)時(shí)標(biāo)明該版本的最后修改時(shí)間?
????????
///?</summary>
????????ulong?SDKVersion,?SDKBuildNum;
????}

????
///?<summary>
????
///?顯示窗口內(nèi)的矩形區(qū)域
????
///?</summary>
????//[StructLayout(LayoutKind.
????
//public?struct?RECT
????
//{
????
//????public?long?left;
????
//????public?long?top;
????
//????public?long?right;
????
//????public?long?bottom;
????
//}

????
///?<summary>
????
///?幀統(tǒng)計(jì)信息結(jié)構(gòu)體?
????
///?</summary>
????public?struct?PFRAMES_STATISTICS
????{
????????
///?<summary>
????????
///?視頻幀
????????
///?</summary>
????????ulong?VideoFrames;
????????
///?<summary>
????????
///?音頻幀
????????
///?</summary>
????????ulong?AudioFrames;
????????
///?<summary>
????????
///?丟失幀
????????
///?</summary>
????????ulong?FramesLost;
????????
///?<summary>
????????
///?丟失的碼流(字節(jié))
????????
///?</summary>
????????ulong?QueueOverflow;
????????
///?<summary>
????????
///?當(dāng)前的幀率(bps)
????????
///?</summary>
????????ulong?CurBps;
????}

????
///?<summary>
????
///?版本信息結(jié)構(gòu)體?
????
///?</summary>
????public?struct?PHW_VERSION
????{
????????
///?<summary>
????????
///?DSP程序的版本號(hào)和Build號(hào)?
????????
///?</summary>
????????ulong?DspVersion,?DspBuildNum;
????????
///?<summary>
????????
///?驅(qū)動(dòng)程序的版本號(hào)和Build號(hào)?
????????
///?</summary>
????????ulong?DriverVersion,?DriverBuildNum;
????????
///?<summary>
????????
///?SDK?的版本號(hào)和Build號(hào)?
????????
///?</summary>
????????ulong?SDKVersion,?SDKBuildNum;
????}

????
///?<summary>
????
///?系統(tǒng)時(shí)間
????
///?</summary>
????public?struct?SYSTEMTIME
????{
????????
ushort?wYear;
????????
ushort?wMonth;
????????
ushort?wDayOfWeek;
????????
ushort?wDay;
????????
ushort?wHour;
????????
ushort?wMinute;
????????
ushort?wSecond;
????????
ushort?wMilliseconds;
????}

????
#endregion

????
#region?delegate

????
///?<summary>
????
///?原始圖像流設(shè)置
????
///?
????
///?typedef?void?(*IMAGE_STREAM_CALLBACK)(UINT?channelNumber,void?*context);
????
///?</summary>
????
///?<param?name="channelNumber">通道號(hào)</param>
????
///?<param?name="context">設(shè)備上下文</param>
????public?delegate?void?IMAGE_STREAM_CALLBACK(uint?channelNumber,?IntPtr?context);

????
///?<summary>
????
///?編碼數(shù)據(jù)流直接讀取回調(diào)函數(shù)
????
///?
????
///?typedef?int?(*STREAM_DIRECT_READ_CALLBACK)(ULONG?channelNumber,void?*DataBuf,DWORD?Length,int?FrameType,void?*context);
????
///?</summary>
????
///?<param?name="channelNumber">通道號(hào)</param>
????
///?<param?name="DataBuf">緩沖區(qū)地址</param>
????
///?<param?name="Length">緩沖區(qū)長(zhǎng)度</param>
????
///?<param?name="FrameType">緩沖區(qū)數(shù)據(jù)幀類型</param>
????
///?<param?name="context">設(shè)備上下文</param>
????
///?<returns></returns>
????[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
????
//public?delegate?int?STREAM_DIRECT_READ_CALLBACK(uint?channelNumber,?byte[]?DataBuf,?uint?Length,?FrameType_t?FrameType,?IntPtr?context);
????public?delegate?int?STREAM_DIRECT_READ_CALLBACK(int?channelNumber,?IntPtr?DataBuf,?int?Length,?FrameType_t?FrameType,?IntPtr?context);
????
//public?unsafe?delegate?int?STREAM_DIRECT_READ_CALLBACK(uint?channelNumber,?void?*?DataBuf,?uint?Length,?int?FrameType,?IntPtr?context);

????
///?<summary>
????
///?直接讀取碼流回調(diào)函數(shù)
????
///?
????
///?typedef?int?(*STREAM_READ_CALLBACK)(ULONG?channelNumber,?void?*context)?
????
///?</summary>
????
///?<param?name="channelNumber">通道號(hào)</param>
????
///?<param?name="context">設(shè)備上下文</param>
????
///?<returns></returns>
????public?delegate?int?STREAM_READ_CALLBACK(ulong?channelNumber,?IntPtr?context);

????
///?<summary>
????
///?移動(dòng)偵測(cè)結(jié)果回調(diào)函數(shù)
????
///?
????
///?typedef?void?(*MOTION_DETECTION_CALLBACK)(ULONG?channelNumber,?BOOL?bMotionDetected,void?*context)?
????
///?</summary>
????
///?<param?name="channelNumber">通道號(hào)</param>
????
///?<param?name="bMotionDetected">
????
///?移動(dòng)偵測(cè)發(fā)生標(biāo)志,如果當(dāng)前通道所設(shè)置的移動(dòng)偵測(cè)
????
///?區(qū)域內(nèi)產(chǎn)生了移動(dòng)偵測(cè),則被置為True;如果當(dāng)前通道所設(shè)置的移動(dòng)偵測(cè)區(qū)域內(nèi)自上
????
///?一次產(chǎn)生移動(dòng)偵測(cè)后delay秒內(nèi)沒有發(fā)生移動(dòng)偵測(cè),則被置為False。
????
///?</param>
????
///?<param?name="context">設(shè)備上下文</param>
????public?delegate?void?MOTION_DETECTION_CALLBACK(ulong?channelNumber,?bool?bMotionDetected,?IntPtr?context);

????
///?<summary>
????
///?畫圖回調(diào)函數(shù)
????
///?
????
///?#define?DRAWFUN(x)???void??(CALLBACK*?x)(long?nPort,HDC?hDc,LONG?nUser)?
????
///?</summary>
????
///?<param?name="nPort">通道號(hào)</param>
????
///?<param?name="HDC">offscreen表面設(shè)備上下文,相當(dāng)于顯示窗口中的DC</param>
????
///?<param?name="nUser">用戶數(shù)據(jù)</param>
????public?delegate?void?DrawFun(long?nPort,?IntPtr?HDC,?long?nUser);

轉(zhuǎn)載于:https://blog.51cto.com/over140/586675

總結(jié)

以上是生活随笔為你收集整理的C# 视频监控系列(7):服务器端——封装API(下)(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。