C# 视频监控系列(4):客户端——音频接收和截图-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

C# 视频监控系列(4):客户端——音频接收和截图

简介:

前言

     由于音频接收这块的代码和说明不多,就和截图功能一起写了,Let's GO! !

 

注意

     本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答留言里的每一个问题,感谢大家关注,欢迎交流 :)

 

系列

     1.     C# 视频监控系列(1):准备

     2.     C# 视频监控系列(2):客户端——封装API

     3.     C# 视频监控系列(3):客户端——连接服务器

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

 

结束

     截图功能也是在我边写这篇文章的时候边实践的,用原来的API发现能截图并保存,但是图片打开是黑色的,后来修改参数类型才对。当然我也更新了前面的文章的API,希望一直这样比较顺利的完成这系列的文章,不得不夸海康的卡确实做的不错!!


转载:http://www.cnblogs.com/over140/archive/2009/02/27/1398221.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章