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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/4 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 视频监控系列(6):服务器端——封装API(上)(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

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

?

注意

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

?

系列

1.?????C# 視頻監控系列(1):準備

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

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

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

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

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

?

正文

?????1.?????HikServer.dll
?

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

namespace?HikServer
{

????
public?struct?PSERVER_VIDEOINFO
????{
????????
///?<summary>
????????
///?序列號
????????
///?BYTE????m_datatype[64];
????????
///?</summary>
????????[MarshalAs(UnmanagedType.ByValArray,?SizeConst?=?64)]
????????
public?byte[]?m_datatype;
????????
///?<summary>
????????
///?系統的通道個數
????????
///?BYTE????m_channum;
????????
///?</summary>
????????public?byte?m_channum;
????????
///?<summary>
????????
///?超時等待時間,1-300單位:分鐘?
????????
///?DWORD???m_waittime;
????????
///?</summary>
????????public?int?m_waittime;
????????
///?<summary>
????????
///?目前沒有使用
????????
///?DWORD???m_bufnum;
????????
///?</summary>
????????public?ulong?m_bufnum;
????}

????
//[StructLayout(LayoutKind.Sequential)]
????
//public?struct?PSERVER_VIDEOINFO
????
//{
????
//????public?IntPtr?m_datatype;??//序列號??
????
//????public?byte?m_channum;//系統的通道個數?
????
//????public?int?m_waittime;//超時等待時間,1-300單位:分鐘?
????
//????public?int?m_bufnum;//目前沒有使用?
????
//}

????
///?<summary>
????
///?通道數據類型
????
///?</summary>
????public?enum?ChannelDataType
????{
????????NORMAL?
=?50,
????????DIALING,
????????SMALLPIC
????}

????
///?<summary>
????
///?VC++Demo:委托內調用SetIBPMode(ChannelHandle[port],211,2,2,framerat);
????
///?</summary>
????
///?<param?name="port"></param>
????
///?<param?name="framerat"></param>
????public?delegate?void?SetIBP(int?port,?int?framerat);

????
///?<summary>
????
///?VC++Demo:委托內調用CaptureIFrame(ChannelHandle[port]);
????
///?</summary>
????
///?<param?name="port"></param>
????public?delegate?void?MakeIFrame(int?port);

????
///?<summary>
????
///?VC++Demo:委托內調用StartVideoCapture(ChannelHandle[port]);????
????
///?</summary>
????
///?<param?name="nChannel"></param>
????public?delegate?void?StartCap(int?nChannel);

????
///?<summary>
????
///?VC++Demo:委托內調用StopVideoCapture(ChannelHandle[port]);
????
///?</summary>
????
///?<param?name="nChannel"></param>
????public?delegate?void?StopCap(int?nChannel);

????
///?<summary>
????
///?驗證用戶名密碼
????
///?</summary>
????
///?<param?name="username"></param>
????
///?<param?name="namelen"></param>
????
///?<param?name="password"></param>
????
///?<param?name="passlen"></param>
????
///?<returns></returns>
????[UnmanagedFunctionPointer(CallingConvention.StdCall)]
????
public?delegate?int?CheckPassword(string?username,?ushort?namelen,?string?password,?ushort?passlen);

????
///?<summary>
????
///?驗證IP
????
///?????VC++Demo:return?0;
????
///?</summary>
????
///?<param?name="nChannel"></param>
????
///?<param?name="nIP"></param>
????
///?<returns></returns>
????[UnmanagedFunctionPointer(CallingConvention.StdCall)]
????
public?delegate?int?CheckIP(int?nChannel,?string?nIP);

????
public?static?class?HikServer
????{
????????
public?static?readonly?uint?WM_USER?=?0x0400;

????????
///?<summary>
????????
///?啟動服務端
????????
///?????返回true表示成功,返回false表示失敗
????????
///?<code>
????????
///?BOOL??__stdcall??MP4_ServerStart(PSERVER_VIDEOINFO?videoinfo);?
????????
///?</code>
????????
///?</summary>
????????
///?<param?name="videoinfo"></param>
????????
///?<returns></returns>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?int?MP4_ServerStart(ref?PSERVER_VIDEOINFO?videoinfo);

????????
///?<summary>
????????
///?停止服務端
????????
///?????返回true表示成功,返回false表示失敗
????????
///?<code>
????????
///?BOOL??__stdcall??MP4_ServerStop();?
????????
///?</code>
????????
///?</summary>
????????
///?<returns></returns>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?bool?MP4_ServerStop();

????????
///?<summary>
????????
///?獲取服務器狀態
????????
///?????返回true表示服務器已經啟動,返回false表示服務器沒有啟動
????????
///?<code>
????????
///?BOOL??__stdcall??MP4_ServerGetState(WORD?*?clientnum);?
????????
///?typedef?unsigned?short??????WORD;
????????
///?</code>
????????
///?</summary>
????????
///?<param?name="clientnum">表示當前與服務器相連的客戶端數據</param>
????????
///?<returns></returns>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?bool?MP4_ServerGetState(out?ushort?clientnum);

????????
///?<summary>
????????
///?給客戶端發送命令碼
????????
///?????和函數MP4_ServerStringToClient不同,它給正連接在該通道上的所有客戶端發送命令碼。?
????????
///?????返回true表示成功,返回false表示失敗?
????????
///?<code>
????????
///?BOOL??__stdcall??MP4_ServerCommandToClient(char?cCommand,char?nChannel);?
????????
///?</code>
????????
///?</summary>
????????
///?<param?name="cCommand">命令碼</param>
????????
///?<param?name="nChannel">通道號</param>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?void?MP4_ServerCommandToClient(int?cCommand,?int?nChannel);

????????
///?<summary>
????????
///?設置接收命令碼的相關參數
????????
///?<code>
????????
///?void??__stdcall??MP4_ServerSetMessage(UINT?nMessage,HWND?hWnd);?
????????
///?</code>
????????
///?</summary>
????????
///?<param?name="nMessage">對應接收程序的消息</param>
????????
///?<param?name="hWnd">應用程序窗口句柄</param>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?void?MP4_ServerSetMessage(uint?nMessage,?IntPtr?hWnd);

????????
///?<summary>
????????
///?設置是否進行IP驗證。?
????????
///?????如果進行IP驗證,調用該函數,那么每次客戶端連接的時候,會調用CheckIP。?
????????
///?????如果不進行IP驗證,不需要調用該函數。?
????????
///?????如果調用了MP4_ServerCheckIP之后,又想取消IP驗證,只需要調用MP4_ServerCheckIP(NULL)。?
????????
///?<code>
????????
///?void??__stdcall?MP4_ServerCheckIP(int(CALLBACK?*CheckIP)(DWORD?nChannel,char*?nIP));?
????????
///?CheckIP函數說明:nChannel表示通道號,nIP表示客戶端的IP地址。返回0表示驗證通過,返回-1?
????????
///?表示驗證沒有通過。?
????????
///?</code>
????????
///?</summary>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?void?MP4_ServerCheckIP(CheckIP?cip);

????????
///?<summary>
????????
///?設置是否進行用戶身份驗證。?
????????
///?????使用同MP4_ServerCheckIP。?
????????
///?????目前namelen和password兩個值無效,都是50,并不表示用戶名和密碼的實際長度。用戶名和密碼必須小于50個字節。?
????????
///?說明:?
????????
///?????1>因為開發包對用戶名和密碼不做任何處理,只是簡單地分別發送50字節的數據到服務端,所以在驗證
????????
///???????的實現過程中,用戶可以通過設置標志位的方法來確定用戶名和密碼的實際長度。?
????????
///?????2>也可以同時進行IP驗證和用戶身份驗證。在開發包中先進行用戶身份驗證,再進行IP驗證。?
????????
///?<code>
????????
///?7.?void??__stdcall??MP4_ServerCheckPassword(int(CALLBACK?*CheckPassword)(char?*username,WORD?namelen,char?*password,WORD?passlen));?
????????
///?CheckPassword函數說明:username表示用戶名,namelen表示用戶名字符串長度,password表示密碼,passlen表示密碼字符串長度。
????????
///?</code>
????????
///?</summary>
????????
///?<param?name="nMessage"></param>
????????
///?<param?name="hWnd"></param>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?void?MP4_ServerCheckPassword(CheckPassword?cp);

????????
///?<summary>
????????
///?往發送緩存寫數據。?
????????
///?????網絡開發包通過這個接口獲得板卡的數據。?
????????
///?說明:?
????????
///?????現在開發包內部不會直接調用StartVideoCapture和StopVideoCapture函數,而是通過StartCap和StopCap
????????
///?????來啟動和停止捕獲數據。如果用戶調用StopVideoCapture或者停止調用MP4_ServerWriteData都會使客戶
????????
///?????端無法收到數據。
????????
///?<code>
????????
///?8.?void??__stdcall??MP4_ServerWriteData(DWORD?nChannel,UCHAR?*pPacketBuffer,?DWORD??nPacketSize,?int?frameType,?int?breakable);?
????????
///?typedef?unsigned?long???????DWORD;
????????
///?typedef?unsigned?char?UCHAR;
????????
///?</code>
????????
///?</summary>
????????
///?<param?name="nChannel">通道號。</param>
????????
///?<param?name="pPacketBuffer">緩沖區指針。</param>
????????
///?<param?name="nPacketSize">緩沖區長度。?</param>
????????
///?<param?name="frameType">幀類型。</param>
????????
///?<param?name="breakable">ReadStreamData的返回值</param>
????????[DllImport("HikServer.dll")]
????????
public?static?extern?void?MP4_ServerWriteData(ulong?nChannel,?string?pPacketBuffer,?ulong?nPacketSize,?int?frameType,?int?breakable);

轉載于:https://blog.51cto.com/over140/586668

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。