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,希望一直这样比较顺利的完成这系列的文章,不得不夸海康的卡确实做的不错!!


本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586694,如需转载请自行联系原作者

相关文章
|
网络协议 Linux 数据处理
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
551 3
|
29天前
|
人工智能 运维 供应链
2025年度十大工业智能大模型平台深度评测,树根科技位列榜首
在工业4.0与数字化转型加速背景下,2025年工业智能大模型进入实效竞争阶段。本文基于技术架构、场景落地、生态协同等维度,对国内主流平台开展系统评测,发布Top10榜单。树根科技凭借多模态融合与行业知识深度整合能力获评AAA级,位居榜首。华为云、阿里云、百度智能云等紧随其后,在制造优化、视觉检测、能源管理等领域各具优势。评测强调“用好大模型”重于“拥有”,为制造企业选型提供权威参考,助力高质量发展。
427 0
|
3月前
|
人工智能 数据挖掘 数据库
通义灵码产品演示: 数据库设计与数据分析
本演示展示如何使用通义灵码进行数据库设计与数据分析。通过SQLite构建电商订单表,利用AI生成表结构、插入样本数据,并完成多维度数据分析及可视化图表展示,体现AI在数据库操作中的高效能力。
313 7
|
机器学习/深度学习 编解码 计算机视觉
YOLOv8改进 | 主干篇 | SwinTransformer替换Backbone(附代码 + 详细修改步骤 +原理介绍)
YOLOv8改进 | 主干篇 | SwinTransformer替换Backbone(附代码 + 详细修改步骤 +原理介绍)
1431 0
|
5月前
|
机器学习/深度学习 算法
WebSailor:探索 WebAgent的超人类推理能力
通义实验室推出WebSailor方案,通过创新的post-training方法显著提升开源模型在复杂网页推理任务中的表现。该方案包括合成高不确定性数据、多轮工具调用轨迹重构及强化学习算法DUPO应用,在多个评测中展现优越性能。
395 1
|
应用服务中间件 nginx Docker
nginx反向代理踩坑(容器方式)
nginx反向代理踩坑(容器方式)
515 0
|
监控 JavaScript Shell
AutoxJS脚本保姆级教程
AutoxJS脚本保姆级教程
836 3
|
12月前
|
Nacos 微服务
Nacos与Eureka的区别
Eureka和Nacos均支持服务注册发现、基于心跳的健康检查及AP模式下的集群数据同步。主要区别在于:心跳频率、服务剔除机制、服务检测与清理周期不同,Nacos还额外提供配置管理功能。
443 0
|
定位技术 vr&ar
科技赋能旅游:景区AR导航营销如何吸引并留住游客
维小帮景区 AR 导航将虚拟画面与现实场景相结合,为游客提供了更加直观、生动的导航服务。通过独特的 AR 导航体验,景区能够在众多竞争对手中脱颖而出,给游客留下深刻的印象,从而激发他们的分享欲望,为景区带来更多的潜在游客。
409 0
科技赋能旅游:景区AR导航营销如何吸引并留住游客
|
安全 程序员 API
几个被淘汰的Python库,请不要再用!
几个被淘汰的Python库,请不要再用!
505 0