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

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

豆豆网   技术应用频道   2009年04月08日  【字号: 收藏本文

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

  前言

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

  一、     写了三篇文章,来一张界面的草图,让大伙心里有个数。

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

转载于:https://www.cnblogs.com/wenwencao/archive/2009/05/11/1453951.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值