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

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

編輯:關於C#

前言

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

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

二、音頻接受

音頻接受的代碼比較簡單,服務器端是默認打開的,只要你將拾音器接上板卡接上標有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)。

三、抓圖、截圖

VC++ Code:

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";
break;
case T_RGB32:
csFile="c:\\rgb.bmp";
break;
default:
return ;
}
MP4_ClientSavePicFile (pBuf,nSize,nWidth,nHeight,nType,csFile.GetBuffer(csFile.GetLength()));
g_bCapPic=FALSE;
}

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

C# Code:

        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";
break;
case T_RGB32:
csFile = @"c:\rgb32.bmp";
break;
}
PcHikClient.MP4_ClientSavePicFile(pBuf, nSize, nWidth, nHeight, nType, csFile);
//停止執行回調
PcHikClient.MP4_ClientSetCapPicCallBack(cs, null);
}

代碼說明:

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 ,希望一直這樣比較順利的完成這系列的文章,不得不誇海康的卡確實做的不錯!!

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