• C#使用EmguCV预览RTSP视频,EmguCV保存RTSP视频


    在做一个视频相关的业务,需要调用摄像头查看监控,摄像头使用的是海思的品牌,本打算用海思的SDK,但考虑到客户可能不只是一个牌子的摄像头,海思的SDK可能对其他品牌不兼容,所以考虑使用RTSP方式调用。

    那么在C#中怎么调用RTSP实时视频呢,在网上查了很多资料,各位大神提供的资料都是虎头蛇尾的,最后在国外的网站找到了答案,免费分享出来供大家参考(发现很多资料CSDN上的,需要积分下载 而且不一定有用)。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Windows;
    using System.Windows.Forms;
    using Emgu.CV;
    using Emgu.CV.Structure;
    namespace WpfAppTest
    {
        /// <summary>
        /// Window1.xaml 的交互逻辑
        /// </summary>
        public partial class Window1 : Window
        {
            private Capture currentDevice;
            private VideoWriter videoWriter;
            private bool recording;
            private int videoWidth;
            private int videoHeight;
    
            public Window1()
            {
                InitializeComponent();
                InitializeVariables();
            }
            private void InitializeVariables()
            {
                currentDevice = new Capture("rtsp://admin:***@172.16.21.80:554");
                recording = false;
                videoWidth = currentDevice.Width;
                videoHeight = currentDevice.Height;
            }
            private void CurrentDevice_ImageGrabbed(object sender, EventArgs e)
            {
                try
                {
                    Mat m = new Mat();
                    currentDevice.Retrieve(m,0);
                    VideoPictureBox.Image = m.Bitmap;
                    if (recording && videoWriter != null)
                    {
                        videoWriter.Write(m);
                    }
                }
                catch (Exception ex)
                {
                }
            }
    
            private void Preview_Click(object sender, RoutedEventArgs e)
            {
                currentDevice.ImageGrabbed += CurrentDevice_ImageGrabbed;
                currentDevice.Start();
            }
    
            private void StartRecording_Click(object sender, RoutedEventArgs e)
            {
                recording = true;
                SaveFileDialog dialog = new SaveFileDialog();
                dialog.DefaultExt = ".MP4";
                dialog.AddExtension = true;
                dialog.FileName = DateTime.Now.ToString();
                DialogResult dialogResult = dialog.ShowDialog();
                if (dialogResult != System.Windows.Forms.DialogResult.OK)
                {
                    return;
                }
                videoWriter = new VideoWriter(dialog.FileName, VideoWriter.Fourcc('M', 'P', '4', 'V'), 30, new System.Drawing.Size(videoWidth, videoHeight), true);
            }
    
            private void StopRecording_Click(object sender, RoutedEventArgs e)
            {
                recording = false;
                if (videoWriter != null)
                {
                    currentDevice.Stop();
                    videoWriter.Dispose();
                }
            }
    
        }
    }
        
    

      

  • 相关阅读:
    [原创]iFPGACable FT2232H JTAG & UART调试器
    [原创]创芯电子实验室iFPGACable JTAG工具实物图
    [原创]FPGA JTAG工具设计(一)
    [方案]基于Zynq WiFi方案构建
    [原创]基于Zynq Linux环境搭建(四)
    [原创]基于Zynq Linux环境搭建(二)
    [原创]基于Zynq Linux环境搭建(三)
    [原创]Zynq AXICDMA测试结果
    [原创]基于Zynq Linux环境搭建(一)
    git使用教程及github远程仓库管理
  • 原文地址:https://www.cnblogs.com/chengNet/p/11724429.html
Copyright © 2020-2023  润新知