程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#視頻監控系列(8):服務器端——預覽和可被客戶端連接(4)

C#視頻監控系列(8):服務器端——預覽和可被客戶端連接(4)

編輯:關於C語言

代碼說明:

1.僅僅實現服務器端的預覽代碼並不多,這也 是在VC++ Demo中不斷注釋代碼、在已經成功完成大部分功能的基礎上才試出來的,可見預覽和服務器啟動是相對獨立的。

2.Form2_Move是窗體移動時執行的,在VC++的也是在窗體移動中進行了同樣處理,否則你一移動窗體會出現難看的一幕呢 : )

3.StartVideoPrevIEw的參數RECT *rect 直接使用Rectangle結構體即可。

4.panel1是窗體是的一個面板Panel。

三、讓 客戶端連接並預覽

C# Code:

        //將委托聲明為成員變量!!
        STREAM_DIRECT_READ_CALLBACK sdrc;

        /// <summary>
        /// 預覽並客戶端連接
        /// </summary>
        private void PreviewAndClIEntConnect()
        {

            sdrc = new STREAM_DIRECT_READ_CALLBACK(STREAM_DIRECT_READ_CALLBACK1);

            //[必須]注冊編碼圖像數據流直接讀取回調函數
            HikVisionSDK.RegisterStreamDirectReadCallback(sdrc, this.Handle);

            //[必須]啟動服務端
            HikServer.MP4_ServerSetStart(new StartCap(StartCap));
            //HikServer.MP4_ServerSetStop(sc);

            //HikServer.MP4_ServerSetIBPMode (new SetIBP(SetIBP));
            //[必須]設置回調,重新生成一個I幀
            HikServer.MP4_ServerSetCapIFrame(new MakeIFrame(MakeIFrame));

            //HikServer.MP4_ServerSetTTL(64);
            //HikServer.MP4_ServerSetNetPort(5050, 6050);

            PSERVER_VIDEOINFO videoInfo = new PSERVER_VIDEOINFO();
            //初始化
            videoInfo.m_datatype = new byte[64];
            //設置發送緩沖區大小
            HikServer.MP4_ServerSetBufNum((ushort)0, (ushort)90);
            videoInfo.m_datatype[0] = (byte)ChannelDataType.SMALLPIC;
            videoInfo.m_channum = (byte)1;
            videoInfo.m_waittime = 5;

            //設置每個通道的最大用戶數量
            //HikServer.MP4_ServerMaxUser(0, 24);

            if (HikServer.MP4_ServerStart (ref videoInfo) == 0)
            {
                MessageBox.Show("服務端啟動錯誤!!");
            }

            //開啟視頻預覽
            StartVideoPrevIEw();
        }

        #region 回調函數

        public void StartCap(int port)
        {
            HikVisionSDK.StartVideoCapture(ChannelHandle);
        }

        public void MakeIFrame(ulong port)
        {
            HikVisionSDK.CaptureIFrame(ChannelHandle);
        }

        public int STREAM_DIRECT_READ_CALLBACK1(int channelNum, IntPtr DataBuf, int Length, FrameType_t frameType, IntPtr context)
        {
            int status = 0;
            HikServer.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 0);
            return 0;
        }

        #endregion

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved