唯訫. 2023-05-15 17:09 采纳率: 0%
浏览 32

c#海康摄像头的调用并保存录像

winfrom展示页面,用c#连接局域网海康摄像头查看实时监控,点击button按钮把录像打开录制5~10秒,手动点击button按钮下载录像并且可以打开录像查看录制的视频。

  • 写回答

1条回答 默认 最新

  • 阿尔法斗士 2023-05-15 17:48
    关注

    如下思路,供参考

    这是一个比较复杂的需求,需要涉及到不同的技术栈和知识点。以下是一个大致的实现思路,供参考:

    • 连接海康摄像头

    使用 C++ 编写程序连接海康摄像头,获取实时监控图像流。这可以通过使用 ONVIF 标准来实现。ONVIF 是一个国际标准,它定义了网络视频产品应该如何相互协作,从而保证视频数据在不同的厂商和设备之间兼容性和互操作性。使用 ONVIF,我们可以将海康摄像头作为一个 IP 设备进行控制。使用 SOAP 或 REST 协议,我们可以向摄像头发送命令,控制其实时视频流。

    • 设计 WinForm 界面

    使用 C# 编写 WinForm 程序,在界面上嵌入 C++ 中连接的海康摄像头实时视频流。具体实现可以借助 Picture 控件或 PictureBox 控件实现。可以将界面分为两个部分:实时视频监控区域和录像操作区域。录像操作区域包括开始录制按钮、保存录像按钮和打开录像按钮。

    • 录像操作

    点击开始录制按钮时,使用 FFMPEG 库(一个专门用于处理音视频的库)录制当前视频流。具体步骤如下:

    • 检查当前是否正在录制视频。
    • 创建新的视频文件,准备开始录制。
    • 定义从哪个时间点录制视频。
    • 将摄像头实时视频流保存到本地文件中,直到记录的时间达到设定值。(5~10秒)
    • 停止录制,关闭视频文件。

    先确保已经安装了 FFMPEG 库,然后可以使用 C# 的 Process 类来启动 ffmpeg 进程,并向其发送指令以进行录音操作。示例代码如下:

    private void btnStartRecording_Click(object sender, EventArgs e)
    {
        if (isRecording) // 如果正在录制视频,则不做任何操作
        {
            MessageBox.Show("Recording is already in progress.");
            return;
        }
    
        var process = new System.Diagnostics.Process();
    
        // 设置要运行的程序名和参数
        process.StartInfo.FileName = "ffmpeg.exe";
        process.StartInfo.Arguments = "-i rtsp://192.168.0.123/stream1 -t 5 -y output.mp4";
    
        // 启动进程并等待它完成
        process.Start();
        process.WaitForExit();
    
        isRecording = true; // 标记为已经在录制视频
    }
    
    • 下载录像

    点击保存录像按钮时,将本地录音输出文件复制到指定位置,并将该文件的路径添加到一个列表中,以备后续查看录像。打开录像按钮可以通过调用系统默认播放器来实现。

    具体实现逻辑可以类似以下代码:

    private void btnSaveRecording_Click(object sender, EventArgs e)
    {
        File.Copy("output.mp4", "C:/recordings/output.mp4");
        recordingsList.Add("C:/recordings/output.mp4");
        MessageBox.Show("Recording has been saved.");
    }
    
    private void btnOpenRecording_Click(object sender, EventArgs e)
    {
        var filePath = (string)listBoxRecordings.SelectedItem;
        Process.Start(filePath);
    }
    

    以上是一个大致的实现思路,具体实现可能还需要根据具体情况进行一些细节调整和修改。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月15日

悬赏问题

  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?
  • ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件
  • ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
  • ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)