• C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)


    前言

         这几天加紧赶工写服务器端的程序,所有系列文章更新较慢,见谅: )

    注意

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

    系列

         1.     C# 视频监控系列(1):准备

         2.     C# 视频监控系列(2):客户端——封装API

         3.     C# 视频监控系列(3):客户端——连接服务器

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

         5.     C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

    正文

         一、给服务器发送字符串

              实现这个功能非常简单,感觉不怎么实用。

              1.     VC++ Code:

    MP4_ClientCommandtoServer((LPCTSTR)ctemp,sendcont,400);

              2.     C# Code: 

    PcHikClient.MP4_ClientCommandtoServer("192.168.0.188""服务器你好:)"14);

              从API文档中能找到关于这个方法的说明:第一个参数是服务器的IP,第二个是要发送的字符串,第三个参数是字符串长度。

         二、客户端对视频录像

              客户端视频录像从API文档(Hikvision 板卡网络开发包编程手册V4.7)中可以看得出可以由MP4_ClientStartCapture或MP4_ClientStartCaptureFile函数来实现这个功能,从VC++的源码可以看得出他是用后者来实现的,简单省事,但是服务器端就没这个函数了- _-#。但是MP4_ClientStartCapture通过回调自己写存储代码更加灵活,可以实现诸如统计信息之类的额外功能,这里只提供VC++对应的C#版本的MP4_ClientStartCaptureFile

              1.     VC++ Code:

        //开始录像
        if (nn1 >= 0)
        {
            sprintf(filename,
    "d:\\mp4test1_%d.mp4",capcount);
            MP4_ClientStartCaptureFile(nn1,filename);
            
    //MP4_ClientStartCapture(nn1);
        }
        
    //关闭录像
        if (nn1>=0)
            MP4_ClientStopCapture(nn1);

               2.     C# Code: 

            /// <summary>
            
    /// 开始录像
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void btnStartCap_Click(object sender, EventArgs e)
            {
                PcHikClient.MP4_ClientStartCaptureFile(cs, 
    "D:\\mp4test1_0.mp4");
            }

            
    /// <summary>
            
    /// 停止录像
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void btnStopCap_Click(object sender, EventArgs e)
            {
                PcHikClient.MP4_ClientStopCapture(cs);
            }

              方法很简单,但是注意之前帖的MP4_ClientStartCaptureFile参数对应错误,否则无法创建文件并一直返回false,现在已经更新前面的SDK封装API的文章了,具体错误如下:

              VC++原型:

    BOOL  __stdcall MP4_ClientStartCaptureFile(LONG StockHandle, LPTSTR FileName);

              之前版本:

    public static extern bool MP4_ClientStartCaptureFile(long StockHandle, string FileName);

              更改后版本:

    public static extern bool MP4_ClientStartCaptureFile(int StockHandle, string FileName);

              注意StockHandle参数数据类型变化。MP4_ClientStopCapture的参数也是long数据类型,不过不影响,改不改成int无所谓。

     

    遗留问题

         保存下来的mp4文件显示的播放总时间和实际播放时间总是差3秒,例如总时间是48秒,而播到45就没有了,比较奇怪,不过影响不大:)

     

    结束

              本章内容仍然简单,出错仍然出在数据类型对应上,所以大家需要多留意了: )

  • 相关阅读:
    android 近百个源码项目【转】
    503 Service Temporarily Unavailable
    linux 复制文件夹内所有文件到另一个文件夹
    国甲魔方(1)
    大雁展翅,轮回,国甲,国丙,速龙,傲龙,御龙这些魔方有什么区别
    77教师一定要看的15部电影【附下载地址】
    教师一定要看的15部电影
    孩子
    为什么我的 app:actionViewClass="android.widget.SearchView"和app:showAsAction="ifRoom|collapseActionView"才有
    大数据征信 是伪命题?还是金融行业的救世主?
  • 原文地址:https://www.cnblogs.com/over140/p/1400223.html
Copyright © 2020-2023  润新知