首页 > 编程语言 >C# 使用ffmpeg读取监控视频流

C# 使用ffmpeg读取监控视频流

时间:2024-05-06 10:14:39浏览次数:24  
标签:ffmpeg C# 视频流 videoStreamDecoder cFarme bitmap var new FFmpeg

  • 编译环境
  • Visual Studio 2022
  • .Net Framework 4.7.2
  • x64
  • 需要开启允许不安全代码(项目属性->生成->允许不安全代码)

之前使用OpenCVSharp写的一个拉流,在服务器上跑不起来。于是换了这个使用FFmpeg.AutoGen的。

参考博文:用C#做一个 拉流播放器 - 摇光Summer - 博客园 (cnblogs.com)

之前看的使用FFmpeg需要安装FFmpeg来使用FFmpeg自带的dll文件。这个博客直接提供了dll的下载方式。下载下来之后就可以直接使用了。非常方便。

 

首先将下载的dll全部放入到debug文件夹下。然后调用注册代码

            FFmpegBinariesHelper.RegisterFFmpegBinaries();//注册ffmpeg
            SetupLogging();//设置日志级别

实例化视频解码器

videoStreamDecoder = new VideoStreamDecoder(url);

按帧读取流

 private unsafe void DecodeAllFramesToImages()
        {
            var info = videoStreamDecoder.GetContextInfo();
            var sourceSize = videoStreamDecoder.FrameSize;
            var sourcePixelFormat = videoStreamDecoder.PixelFormat;
            var destinationSize = sourceSize;
            var destinationPixelFormat = AVPixelFormat.AV_PIX_FMT_BGR24;
            var vfc = new VideoFrameConverter(sourceSize, sourcePixelFormat, destinationSize, destinationPixelFormat);
            while (CanRead)
            {
                bool success = videoStreamDecoder.TryDecodeNextFrame(out var farme);
                if (success)
                {
                    var cFarme = vfc.Convert(farme);
                    using (var bitmap = new Bitmap(cFarme.width, cFarme.height, cFarme.linesize[0], PixelFormat.Format24bppRgb, (IntPtr)cFarme.data[0]))
                    {
                        _Image = bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), bitmap.PixelFormat);
                        Graphics g = picBefore.CreateGraphics();
                        g.SmoothingMode = SmoothingMode.HighSpeed;
                        g.DrawImage(bitmap, 0, 0, (int)picBefore.Size.Width, (int)picBefore.Size.Height); //在窗体的画布中绘画出内存中的图像
                    }
                }
                else
                {
                    Console.WriteLine("获取图片失败");
                }
            }
        }

 

标签:ffmpeg,C#,视频流,videoStreamDecoder,cFarme,bitmap,var,new,FFmpeg
From: https://www.cnblogs.com/kjgagaga/p/18174324

相关文章

  • 解决报错:Could not set property 'id' of 'class com.north.domain.Book' with value
    报错原因问题描述:因为MyBatis-Plus默认的id自增策略使用的雪花算法org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.reflection.ReflectionException:Couldnotsetproperty'id'of'classcom.north.domain.Book'withvalue'1......
  • I2C协议
    I2C的时序如下图I2C总线进行数据传送时,时钟信号SCL为高电平期间,数据线SDA上的数据必须稳定;只有在SCL上的信号为低电平时,SDA上的高电平或低电平状态才允许变化。因为当SCL是高电平时,数据线SDA的变化被规定为控制命令,如上图所示的起始条件和停止条件。数据传送过程中,先传送最高......
  • MySQL Connection not available问题解决方案
    在后端开发过程中,连接mysql数据库,过几个小时第一次使用会出现MySQLConnectionnotavailable报错这是因为MySql数据库存在一个连接池的回收时间,超过这个时间会导致资源无法正常释放,无法连接到MySql数据库1)在相关引用页面,进行定时刷新功能,这样尽管是同一个连接,但是相当于一个新......
  • A2P,即Application-to-Person,是一种将信息或服务通过应用程序(如短信)发送给用户的过程
    A2P,即Application-to-Person,是一种将信息或服务通过应用程序(如短信)发送给用户的过程。它广泛应用于各种场景,特别是在市场营销和客户服务领域,因其能够直接接触到用户并提供丰富的交互方式而备受青睐。在A2P的应用中,短信服务扮演着至关重要的角色。例如,在业务触发向个人发送短信的......
  • CSS mask 与 切图艺术
    一、“切图”的局限性传统的“切图”简单暴力,但往往缺少适应性。适应性一般有两种,一是尺寸自适应,二是颜色可以自定义。举个例子,有这样一个优惠券样式关于这类样式实现技巧,之前在这篇文章中有详细介绍:CSS实现优惠券的技巧不过这里略微不一样的地方是,两个凹陷处都是平滑处理......
  • 使用 CSS columns 布局来实现自动分组布局
    最近在项目中碰到这样一个布局,有一个列表,先按照4*2的正常顺序排列,当超过8个后,会横向重新开始4*2的布局,有点像一个个独立的分组,然后水平排列,如下图中序号是 dom 序列,所以其实这这样的一个顺序很多同学可能会想到给子元素分组(通过 JS将原数组拆分组合成一个二维数......
  • Mac 安装 RabbitMQ
    一般来说,安装分为两种方式:通过brew命令安装。在这里,推荐使用brew来安装,非常强大的Mac端包管理工具。下载RabbitMQ源文件,解压源文件之后进行安装。Docker启动一、brew命令安装Mac安装RabbitMQ1、安装erlangbrewinstallerlang2、安装rabbitmqbrewinstall......
  • C#的基于.net framework的Winform编程 - 编程手把手系列文章
          对于C#,笔者最早接触的是ASP.NET里的开发,后面对Winform程序也有一定的开发,但是真正理解和重新编码是这些年的事,在我的C#标签里有一些例子,记录了winform程序开发的一些功能。此文只是记录基于.netframework的用C#开发Winform程序的一个过程。1、安装VisualStud......
  • Android开发 Jetpack Compose Canvas
    版权声明本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/17657716.html本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。前言  此篇博客讲解Canvas的使用 画线正常的线条效果图......
  • 博客园商业化之路:融资做与众不同的众包平台,让开发能力成为一种服务(Coding as a Servi
    园子的诞生,与商业无关,是一位编程爱好者业余时间的偶然。园子的坚持,也与商业无关,是来自服务于成千上万开发者的成就感。当十多年前业余时间无法支撑园子的进一步发展时,初生牛犊不怕虎地毅然辞职从江苏扬州来到上海开始为园子的发展而创业,当时心里知道,只有商业化,才有未来。但那时......