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)。

三、     抓图、截图    

               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  : )

本文转自博客园农民伯伯的博客,原文链接:C# 视频监控系列(4):客户端——音频接收和截图,如需转载请自行联系原博主。

目录
相关文章
|
7月前
|
数据采集 监控 网络协议
linux系统中利用QT实现视频监控的基本方法
linux系统中利用QT实现视频监控的基本方法
194 0

热门文章

最新文章