天天看點

C# 視訊監控系列(4):用戶端——音頻接收和截圖

前言

     由于音頻接收這塊的代碼和說明不多,就和截圖功能一起寫了,let's go! !

注意

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

系列

正文

     一、     寫了三篇文章,來一張界面的草圖,讓大夥心裡有個數。

C# 視訊監控系列(4):用戶端——音頻接收和截圖

     二、     音頻接受

               音頻接受的代碼比較簡單,伺服器端是預設打開的,隻要你将拾音器接上闆卡接上标有aid 1/2/3/4白色線就可以了。

               vc++ code:

    if (nn1 >= 0 )

    {

        mp4_clientaudiostart(nn1);

        mp4_clientaudiovolume(0xfff0);

    }

               c# code:

            if (cs >= 0)

            {

                pchikclient.mp4_clientaudiostart(cs);

                pchikclient.mp4_clientaudiovolume(0xffff);

            }

               注意mp4_clientaudiovolume設定的音量值範圍:(0-0xffff)。

     三、     抓圖、截圖    

C# 視訊監控系列(4):用戶端——音頻接收和截圖

mp4_clientsetcappiccallback(nn1,cappicfun);

void callback cappicfun(long nport,\

                           char * pbuf,long nsize,\

                           long nwidth,long nheight,\

                           long nstamp,long ntype,long nreceaved)

{

    if(!((g_bcappic) && (nport == ipos)))

        return;

    cstring csfile;

    switch(ntype)

    case t_uyvy:

        csfile="c:\\uyvy.bmp";

        break;

    case t_yv12:

        csfile="c:\\yv12.bmp";

    case t_rgb32:

        csfile="c:\\rgb.bmp";

    default: 

        return ;

    mp4_clientsavepicfile(pbuf,nsize,nwidth,nheight,ntype,csfile.getbuffer(csfile.getlength()));    

    g_bcappic=false;

}

C# 視訊監控系列(4):用戶端——音頻接收和截圖

               可以看得出,截圖是通過回調來實作了,這裡注意了,我們在寫對應的回調函數的時候,需要把回調執行個體成成員變量。

C# 視訊監控系列(4):用戶端——音頻接收和截圖

        private const int t_uyvy = 1;

        private const int t_yv12 = 3;

        private const int t_rgb32 = 7;

        private cappicfun cpf;

        private void button3_click(object sender, eventargs e)

        {

            pchikclient.mp4_clientsetcappiccallback(cs, cpf);

        }

        //public void cappicfun1(int stockhandle, [marshalas(unmanagedtype.lparray, sizeconst = 152064)] byte[] pbuf, int nsize, int nwidth, int nheight, int nstamp, int ntype, int nreceaved)

        public void cappicfun1(int stockhandle, intptr pbuf, int nsize, int nwidth, int nheight, int nstamp, int ntype, int nreceaved)

            string csfile = string.empty;

            switch (ntype)

                case t_uyvy:

                    csfile = @"c:\uyvy.bmp";

                    break;

                case t_yv12:

                    csfile = @"c:\yv12.bmp";

                case t_rgb32:

                    csfile = @"c:\rgb32.bmp";

            pchikclient.mp4_clientsavepicfile(pbuf, nsize, nwidth, nheight, ntype, csfile);

            //停止執行回調

            pchikclient.mp4_clientsetcappiccallback(cs, null);

C# 視訊監控系列(4):用戶端——音頻接收和截圖

               代碼說明:

                    1.     button3點選事件對應的是界面上點選截圖按鈕的事件。

                    2.     從api文檔中我們可以看到關于mp4_clientsetcappiccallback的說明:“注意要盡快傳回,如果要停止回調,可以把回調函數指針cappicfun設為null。一旦設定回調函數,則一直有效,直到程式退出。”。

                    3.     請注意在上文的基礎上運作用戶端連上伺服器并顯示視訊畫面後再調用本函數,否則函數既不報錯也不會截取圖檔。

                    4.     委托private cappicfun cpf;的執行個體化我是在form1_load中進行的:cpf = new cappicfun(cappicfun1);

                    5.     不出意外的話,按照預設配置您的c盤根目錄下應該會有yv12.bmp  : )

結束

     截圖功能也是在我邊寫這篇文章的時候邊實踐的,用原來的api發現能截圖并儲存,但是圖檔打開是黑色的,後來修改參數類型才對。當然我也更新了前面的文章的api,希望一直這樣比較順利的完成這系列的文章,不得不誇海康的卡确實做的不錯!!

轉載:http://www.cnblogs.com/over140/archive/2009/02/27/1398221.html

繼續閱讀