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

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

編輯:關於C語言

VideoWin.cpp的OnPaint方法

StartVideoPrevIEw(&dc);
               VideoWin.cpp的StartVideoPrevIEw方法

    for(int i = 0; i < GetTotalDSPs(); i++){
        StopVideoPrevIEw(ChannelHandle[i]);
    }

    RECT prevIEwWnd;
    GetClientRect(&prevIEwWnd);

    //CDC *pDC = GetDlgItem(IDC_VIDEOWIN)->GetDC();
    CBrush tempBrush(RGB(10, 10, 10));
    CBrush *oldBrush = dc->SelectObject(&tempBrush);
    dc->Rectangle(&prevIEwWnd);
    dc->SelectObject(oldBrush);

    int rectWidth = previewWnd.right - prevIEwWnd.left;
    int rectHeight = previewWnd.bottom - prevIEwWnd.top;

    int numRects = GetTotalDSPs();


    ZeroMemory(rectList, sizeof(rectList));

    numRects = CacRects(GetTotalDSPs());

    for(i = 0; i < GetTotalDSPs(); i++){
        if(bDdrawMode)
            ::StartVideoPrevIEw(ChannelHandle[i], m_hWnd, &rectList[i], FALSE, vdfRGB16, 25);
        else
            ::StartVideoPrevIEw(ChannelHandle[i], m_hWnd, &rectList[i], FALSE, vdfYUV422Planar, 25);
    }

1.2.代碼分析

1.從OnInitDialog中並參照《DS-4000HC、HCS、HC+、HF、HS、MD卡的Windows編程指南V4.3》的 [API調用順序](pdf 21頁)以及對應的注釋能看得出基本上是做板卡的初始化,服務器的初始化等。

2.StreamDirectReadCallback回調 函數主要是通過MP4_ServerWriteDataEx將數據寫入內存(文檔注釋:往發送緩存寫數據。)和用_write寫文件做存儲視頻錄像。

3.預覽的 代碼是在OnPaint事件調用的。

二、服務器端預覽

C# Code:

        #region 變量

         IntPtr ChannelHandle;

        #endregion

        #region 窗體事件

         private void Form2_Load(object sender, EventArgs e)
        {
            //設置系統默認的視頻制式
            HikVisionSDK.SetDefaultVideoStandard(VideoStandard_t.StandardNTSC);

            //初始化板卡
            if (HikVisionSDK.InitDSPs() < 0)
            {
                MessageBox.Show("初始化DSPs失敗!!");
                return;
            }

            if (HikVisionSDK.GetTotalDSPs() == 0)
            {
                MessageBox.Show("沒有可用的通道!!您是否已經啟動服務器端?");
                return;
            }

            //打開通道
            ChannelHandle = HikVisionSDK.ChannelOpen(0);
            //設置編碼幀結構、幀率
            HikVisionSDK.SetIBPMode(ChannelHandle, 100, 2, 1, 25);
            //設置編碼圖像質量
            HikVisionSDK.SetDefaultQuant(ChannelHandle, 15, 15, 20);

            //視頻預覽
            StartVideoPrevIEw();
        }

        /// <summary>
        /// 視頻預覽
        /// </summary>
        private void StartVideoPrevIEw()
        {
            Rectangle rect = panel1.ClIEntRectangle;
            HikVisionSDK.StartVideoPrevIEw(ChannelHandle, panel1.Handle, ref rect, false, (int) TypeVideoFormat.vdfRGB16, 25);
        }

        /// <summary>
        /// 窗體移動
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form2_Move(object sender, EventArgs e)
        {
            HikVisionSDK.StopVideoPrevIEw(ChannelHandle);
            StartVideoPrevIEw();
        }

        #endregion

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