博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 视频监控系列(4):客户端——音频接收和截图
阅读量:5212 次
发布时间:2019-06-14

本文共 2528 字,大约阅读时间需要 8 分钟。

前言

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

 

注意

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

 

系列

     1.     

     2.     

     3.     

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

转载于:https://www.cnblogs.com/carekee/articles/2220197.html

你可能感兴趣的文章
【做题】arc068_f-Solitaire——糊结论
查看>>
Poj 1094 拓扑排序 水题
查看>>
Oracle SQL查询,日期过滤条件要注意的一点
查看>>
JavaScript深入系列(一)--原型和原型链详解
查看>>
一点感想
查看>>
产生随机数
查看>>
Python命名规范
查看>>
滚动条
查看>>
程序员的自我修养九Windows下的动态链接
查看>>
BZOJ 4052: [Cerc2013]Magical GCD
查看>>
Codeforces Round #361 (Div. 2)
查看>>
oauth2学习
查看>>
Python time & datetime & string 相互转换
查看>>
细说WebSocket - Node篇
查看>>
1014 装箱问题——http://codevs.cn/problem/1014/
查看>>
java.lang.UnsupportedOperationException
查看>>
Linux operating system (Ubuntu) 学习-1
查看>>
Python字典实现分析
查看>>
jenkins+testNG
查看>>
Java自定义范型的应用技巧
查看>>