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,如需转载请自行联系原作者

相关文章
|
3月前
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
|
2月前
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
|
数据采集 开发工具 Android开发
Android平台如何实现屏幕数据采集并推送至RTMP服务器
随着无纸化、智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2)为例,介绍下如何采集编码推送RTMP数据到流媒体服务器。
187 0
|
存储 编解码 缓存
海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄了个来实测确认。经测试实际上也是可以通过web网页配置(与网络摄像头基本是一致的,在码流方面可能会有些不一样),然后提取rtsp流的,界面与球机无异,只是没有球机的云台控制功能,但是界面上也是有的。
海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
|
定位技术 开发工具 Windows
如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析
在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输,并通过h264 sei方式就可以把数据放入h264 Access Unit中传输。
292 0
|
前端开发
前端(六):读取本地音视频设备并进行播放
读取本地音视频设备并进行播放
135 0
|
编解码 应用服务中间件 nginx
几种将设备视频流转码成浏览器能够播放的协议的方法
将rtsp转换成浏览器能访问的hls协议和http-flv协议的方法
712 0
|
物联网 API
设备端和服务端检测设备是否在线的方法
使用物联网时,有时设备端和服务端都需要检测设备是否在线。
1338 0
串口助手数据发送与接收(查询法)
串口助手数据发送与接收(查询法) 宏定义 初始化 数据发送 数据接收 主函数
476 0