C# OpenCvSharp读取rtsp流录制mp4可分段保存

软件界面:

测试环境:

VS2019

.NET Framework 4.7.2

OpencvSharp4.8.0

输入RTSP流地址即可拉取RTSP流,支持抓拍和录制RTSP流视频,且支持支持按固定时间保存,比如我想5分钟保存一个视频,设置保存间隔为300,代码已经封装成类模块,调用十分简单 ,代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using FIRC;
using OpenCvSharp;

namespace RtspDemo
{
    public partial class Form1 : Form
    {
        RtspManager rm = new RtspManager();
        bool startRecordVideo = false;
        int totalSaveFrameCount = 0;
        VideoManager vm = null;
        int startIndex = 0;

        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }

        private void btn_connect_Click(object sender, EventArgs e)
        {
            if(btn_connect.Text=="连接")
            {
                if (string.IsNullOrEmpty(tb_rtsp.Text))
                {
                    tssl_show.Text = "rtsp流地址错误!";
                    return;
                }
                rm.Connect(tb_rtsp.Text);
                if (rm.Connected)
                {
                    tssl_show.Text = "连接成功";
                    btn_connect.Text = "停止";
                    rm.Start();
                }
                else
                {
                    tssl_show.Text = "连接失败";
                }

            }
            else
            {
                rm.Stop();
                rm.DisConnect();
                btn_connect.Text = "连接";
                tssl_show.Text = "连接中断!";
            }
           

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            rm.GetImage += Rm_GetImage;
            rm.GetStatus += Rm_GetStatus;
        }

        private void Rm_GetStatus(string msg)
        {
            if(msg=="disconnect")
            {
                btn_connect.Text = "连接";
                btn_video.Text = "开始录像";
                vm.Dispose();
            }
        }

        private void Rm_GetImage(OpenCvSharp.Mat frame)
        {
            if(startRecordVideo)
            {
                startIndex++;
                if(startIndex>=totalSaveFrameCount)
                {
                    startIndex = 0;
                    var saveFile = GetTimeString() + ".mp4";
                    vm = new VideoManager(saveFile, FourCC.MP4V, rm.Fps, rm.Width, rm.Height);
                }
                vm.WriteFrame(frame);
            }
            pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(frame);
        }

        public string GetTimeString()
        {
            return DateTime.Now.ToString("yyyyMMdd-HHmmss_fff");
        }
        private void btn_pic_Click(object sender, EventArgs e)
        {
            if(pictureBox1.Image!=null)
            {
                var saveFile = GetTimeString() + ".jpg";
                pictureBox1.Image.Save(saveFile,ImageFormat.Jpeg);
                tssl_show.Text = "抓拍成功,保存为" + saveFile;
            }
        }

        private void btn_video_Click(object sender, EventArgs e)
        {
            if(btn_video.Text=="开始录像")
            {
                if(btn_connect.Text=="连接")
                {
                    tssl_show.Text = "请先连接RTSP流!";
                    return;
                }
                btn_video.Text = "停止录像";
                btn_video.Update();
                Task.Run(() => {
                totalSaveFrameCount = Convert.ToInt32(tb_interval.Text) * rm.Fps;
                startIndex = 0;
                var saveFile = GetTimeString() + ".mp4";
                vm = new VideoManager(saveFile,FourCC.MP4V,rm.Fps,rm.Width,rm.Height);
                startRecordVideo = true;
               
                });

            }
            else
            {
                vm.Dispose();
                startRecordVideo = false;
                btn_video.Text ="开始录像";
            }
        }
    }
}

视频演示:

C# OpenCvSharp读取rtsp流录制mp4_哔哩哔哩_bilibiliC# OpenCvSharp读取rtsp流录制mp4, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:随机地址生成工具1.3.3使用教程,xml转txt工具终结版1.3.1使用教程voc转yolo工具软件教程,相似图片删除工具使用教程快速删除类似图片软件,使用易语言部署yolov8的tensorrt模型,IDM6.422【毛子重新打包版】免激活直装,小白友好,pyqt5离线安装工具IDLE教程自动配置desginer pyuic到pycharm,轻松教你学会如何内置QQ模块~,OCR区域自动识别重命名工具1.1使用教程,实例分割语义分割数据集自动预标注反标注系统之图片自动标注视频演示,给IDLE或anaconda离线安装pyqt5工具教程傻瓜式操作离线安装pyqt5自动配置designer到pycharmicon-default.png?t=N7T8https://www.bilibili.com/video/BV1AG411r7fW/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee

源码下载地址:

https://download.csdn.net/download/FL1623863129/88673726

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/276229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

边缘检测——PidiNet网络训练自己数据集并优化推理测试(详细图文教程)

PiDiNet 是一种用于边缘检测的算法,它提出了一种简单、轻量级但有效的架构。PiDiNet 采用了新 颖的像素差卷积,将传统的边缘检测算子集成到现代 CNN 中流行的卷积运算中,以增强任务性能。 在 BSDS500、NYUD 和 Multicue 上进行了大量的实验…

联营商自述被坑惨,加盟库迪没有未来?

撰稿 | 多客 来源 | 贝多财经 近日,库迪联营商在社交平台不约而同发出了致库迪咖啡管理层的公开信,两封公开信可谓字字珠玑,没有一句废话,揭开了库迪咖啡在细节、运营、扩张、培训等方方面面的“背后真相”。 两封公开信 折射库…

大数据技术16:数据湖和湖仓一体

前言:近几年大数据概念很多,数据库和数据仓库还没搞清楚,就又出了数据湖,现在又开始流行湖仓一体。互联网公司拼命造高大上概念来忽略小白买单的能力还是可以的。 1、数据库 数据库是结构化信息或数据的有序集合,一般以…

24、Qt使用QCustomPlot

一、下载文件 进入官网,选择“Download”、QCustomPlot.tar.gz Qt Plotting Widget QCustomPlot - Download 二、创建项目 创建一个"Qt Widget Application"项目,基类选择“QMainWindow”,把刚才下载的压缩包里的“qcustomplot.…

给零基础朋友的编程课08 - 代码

给零基础朋友的编程课08 - 旋转、圆弧、初识模块化编程。_哔哩哔哩_bilibili Code: / // 彩色案例 艺术仿制品3 // /// 色表 // // 奶白 215,214,160 // 金黄 187,176,112 // 赭石 96,56,20 // 橙色 218,114,53// 项目设定 size(1000,1000); background(215,214,160); stroke…

vue3-13

token可以是后端api的访问依据,一般绝大多数时候,前端要访问后端的api,后端都要求前端请求需要携带一个有效的token,这个token用于用户的身份校验,通过了校验,后端才会向前端返回数据,进行相应的操作,如果没…

c++ / day01

1. 整理思维导图 2. 定义自己的命名空间myspace&#xff0c;并在myspace中定义一个字符串&#xff0c;实现求字符串大小的函数。 代码 #include <iostream>using namespace std;namespace myns {unsigned long long strlen(string s){return s.length();}}int main() {…

算法导论复习(七) 动态规划

动态规划一般用来求解最优化问题 设计一个动态规划算法一般有以下四步&#xff1a; 描述一个最优解的结构特征。递归地定义最优解的值。计算最优解的值&#xff0c;通常采用自底向上的方法。利用计算出的信息构造出一个最优解。 钢条切割问题 体现了动态规划的一个重要性质&a…

获取b站合集视频时长最新可用代码(2023.12.28)小白也能用

在网上搜索获取b站分集视频时长的代码&#xff0c;发现大部分都过时了 原链接&#xff1a;已过时代码链接 我对原代码做出了部分修改&#xff0c;以下代码于2023.12.28测试&#xff08;Edge浏览器&#xff09; javascript: (function() {var hour 0;var minute 0;var secon…

Leetcode—1572.矩阵对角线元素的和【简单】

2023每日刷题&#xff08;七十三&#xff09; Leetcode—1572.矩阵对角线元素的和 实现代码 class Solution { public:int diagonalSum(vector<vector<int>>& mat) {int n mat.size();if(n 1) {return mat[0][0];}int sum 0;int i 0, j n - 1;while(i &…

低信噪比环境下的语音端点检测

端点检测技术 是 语音信号处理 的关键技术之一为提高低信噪比环境下端点检测的准确率和稳健性&#xff0c;提出了一种非平稳噪声抑制和调制域谱减结合功率 归一化 倒谱距离的端点检测算法 1 端点检测 1-1 定义 定义&#xff1a;在 存在背景噪声 的情况下检测出 语音的起始点和…

Android中_Service生命周期和AMS流程的创建

Service生命周期可以结合Android生命周期分析。 Service生命周期可以从两种启动Service的模式开始讲起&#xff0c;分别是context.startService()和context.bindService()。 Service的生命周期与启动和绑定状态相关。当调用startService()方法启动服务时&#xff0c;会执行onS…

“踩坑”经验分享:Swift语言落地实践

作者 | 路涛、艳红 导读 Swift 是一种适用于iOS/macOS应用开发、服务器端的编程语言。自2014年苹果发布 Swift 语言以来&#xff0c;Swift5 实现了 ABI 稳定性、Module 稳定性和Library Evolution&#xff0c;与Objective-C&#xff08;下文简称“OC”&#xff09;相比&#xf…

QLabelQPushButton和QLineEdit

QLabel 设置文件格式字体颜色背景 源码 设置图片 源码 设置gif 设置文本 源码 富文本 (Rich Text): 格式化选项&#xff1a;富文本支持各种格式化选项&#xff0c;如字体样式&#xff08;粗体、斜体&#xff09;、字体大小、颜色、超链接、图片插入、列表、表格等。文件格式&a…

pybullet安装时出现fatal error C1083: 无法打开包括文件: “string.h”: No such file or directory

pybullet安装时出现fatal error C1083: 无法打开包括文件: “string.h”: No such file or directory 报错原文&#xff1a; -----CloneTreeCreator.cppD:\Program_Professional\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.38.33130\include\cstring(11): fat…

机器环境无法访问GitHub情况下linux安装OpenCV执行cmake无法下载ADE文件v0.1.1f.zip

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 在CSDN的博文《构建VisualStudio2019OpenCV4.3的C windows编译环境》中&#xff0c;老猿介绍了opencv版本的下载方法的方法&#xff0c;该方法下载OpenCV的代码不要上GitHub&#xff0c;国内可以直…

记edusrc一处信息泄露登录统一平台

目录 前言 测试思路 本文由掌控安全学院 - sbhglqy 投稿 前言 我们都知道像大学之类的各种平台的登录账号基本上是学号&#xff0c;初始登录密码基本上是学生身份证的后6位再拼接上一些带有学校缩写的英文字母。所以我们在找漏洞的时候可以换一种思路&#xff0c;先通过去找…

辅助工具

本章将会通过以下几个角度&#xff0c;简要介绍几款渗透测试的辅助工具。 ● 工具的功能&#xff1b; ● 如果这款工具没有被Kali Linux 收录&#xff0c;本文也会介绍其安装过程&#xff1b; ● 应用案例。 稍后介绍的部分工具确实没有被 Kali Linux 收录。要使用这些软件…

ApiPost插件⭐️与IDEA的搭配使用,通过引入插件直接在项目里一键开测

小伙伴们大家好&#xff0c;用接口测试工具有一段时间了&#xff0c;最近发现该工具有提供插件直接可以在项目里测试接口&#xff0c;并且页面布局不输应用 目录 一、ApiPost插件介绍 二、安装插件 一、ApiPost插件介绍 Apipost 是一个用于测试和调试 API 接口的 IDEA 插件…

Ubuntu fcitx Install

ubuntu经常出现键盘失灵的问题 查询资料得知应该是Ibus框架的问题 于是需要安装fcitx框架和搜狗拼音 sudo apt update sudo apt install fcitx 设置fcitx开机自启动&#xff08;建议&#xff09; sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/ 然后…