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):客户端——音频接收和截图,如需转载请自行联系原博主。

目录
相关文章
|
12天前
|
设计模式 IDE API
C# 一分钟浅谈:GraphQL 客户端调用
本文介绍了如何在C#中调用GraphQL API,涵盖基本步骤、常见问题及解决方案。首先,通过安装`GraphQL.Client`库并创建客户端实例,连接到GraphQL服务器。接着,展示了如何编写查询和突变,以及处理查询语法错误、变量类型不匹配等常见问题。最后,通过具体案例(如管理用户和订单)演示了如何在实际项目中应用这些技术,帮助开发者更高效地利用GraphQL。
59 38
C# 一分钟浅谈:GraphQL 客户端调用
|
15天前
|
设计模式 API 数据处理
C# 一分钟浅谈:GraphQL 客户端调用
本文介绍了如何在C#中使用`GraphQL.Client`库调用GraphQL API,涵盖基本查询、变量使用、批量请求等内容,并详细说明了常见问题及其解决方法,帮助开发者高效利用GraphQL的强大功能。
91 57
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
66 8
|
7月前
|
网络协议 C# C++
BytesIO | 零基础轻松看懂 C# TCP客户端(完整源码+视频教程)
零基础轻松看懂 C# TCP客户端(完整源码+视频教程) 如果非IT行业的女朋友都能学会的话,应该就算0基础入门的教学视频了吧! 超简单的C# TCP开发入门,短短的代码,完整的功能,掏出你的VS码一个试试手吧!
184 0
BytesIO | 零基础轻松看懂 C# TCP客户端(完整源码+视频教程)
|
7月前
|
Web App开发 网络协议 安全
C# | 实现QUIC协议的客户端与服务端
QUIC(Quick UDP Internet Connections)是一种基于UDP协议的可靠、安全、高效的传输协议,由Google开发。它是HTTP/3协议的基础,并被视为未来互联网传输层协议的重要候选者之一。 与TCP不同,QUIC协议使用多路复用(Multiplexing)技术,可以在一个连接上同时传输多个数据流,这些数据流可以独立于彼此进行流量控制和拥塞控制,从而提高了传输效率。此外,QUIC协议还支持零RTT握手,即在第一次连接时就可以发送数据,进一步减少了延迟。
233 0
C# | 实现QUIC协议的客户端与服务端
C# GDI+绘图(三)GDI+实现QQ截图类似功能
C# GDI+绘图(三)GDI+实现QQ截图类似功能
|
C# Python
基于Flask创建Python服务端,并调用Python客户端、C#客户端
基于Flask创建Python服务端,并调用Python客户端、C#客户端
168 0
|
设计模式 缓存 NoSQL
U3D客户端框架之类对象池技术优化C#语言GC
类对象池,类似对象池,顾名思义就是一定数量的已经创建好的类对象(Object)的集合。当需要创建对象时,先在池子中获取,如果池子中没有符合条件的对象,再进行创建新对象,同样,当对象需要销毁时,不做真正的销毁,而是将其对象SetActive(false),并存入池子中。这样就避免了大量对象的创建销毁,减少了GC,优化了性能。
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
|
NoSQL Redis C#
C#两大知名Redis客户端连接哨兵集群的姿势
我的思路是将Redis、Sentinel、Redis Client App链接到同一个网桥网络,这个网桥内的Redis Client App就可以使用ContainerIP访问网桥内任意redis节点。
C#两大知名Redis客户端连接哨兵集群的姿势