当前位置: 首页 > article >正文

opencvsharp usb摄像头录像 c# H264编码

1.首先创建ConsoleApp,.Net 9.0不要创建WinFormWInForm帧率和实际对不上,有延时

2.下载opencvsharp。

3.下载openh264-1.8.0-win32.dll  ,  openh264-1.8.0-win64.dll .放在根目录。

https://github.com/cisco/openh264

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleApp1
{internal class Program{private const int CameraIndex = 0;private const double Fps = 30.0;// private static readonly OpenCvSharp.Size FrameSize = new OpenCvSharp.Size(1280, 720);private static readonly OpenCvSharp.Size FrameSize = new OpenCvSharp.Size(640, 480);private const int ReconnectInterval = 3000; // 重试间隔(ms)private const int MaxReconnectAttempts = 5; // 最大重试次数static void Main(string[] args){int reconnectAttempts = 0;bool isRecording = true;while (isRecording && reconnectAttempts < MaxReconnectAttempts){try{using (var capture = new VideoCapture(CameraIndex))using (var writer = new VideoWriter()){if (!InitializeCamera(capture)){reconnectAttempts++;Thread.Sleep(ReconnectInterval);continue;}string OutputFile = System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + "_output.avi";if (!InitializeVideoWriter(writer, OutputFile, Fps, FrameSize)){Console.WriteLine("无法初始化视频写入器!");return;}Console.WriteLine("开始录制,按ESC键停止...");reconnectAttempts = 0; // 重置重试计数器using (var window = new Window("摄像头画面"))using (var frame = new Mat()){while (true){// 检查摄像头是否仍然连接if (!capture.IsOpened()){Console.WriteLine("检测到摄像头断开连接!");break;}// 捕获帧capture.Read(frame);DateTime now = DateTime.Now;Cv2.PutText(frame, now.ToString("yyyy-MM-dd HH:mm:ss"), new Point(10, 30),HersheyFonts.HersheySimplex, 0.6, Scalar.White, 1);if (frame.Empty()){Console.WriteLine("接收到空帧,可能摄像头已断开!");break;}// 显示帧window.ShowImage(frame);// 写入帧到文件writer.Write(frame);// 按ESC键退出if (Cv2.WaitKey(10) == 27){isRecording = false;break;}}}}}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}if (isRecording && reconnectAttempts < MaxReconnectAttempts){Console.WriteLine($"尝试重新连接({reconnectAttempts + 1}/{MaxReconnectAttempts})...");reconnectAttempts++;Thread.Sleep(ReconnectInterval);}}if (reconnectAttempts >= MaxReconnectAttempts){Console.WriteLine($"已达到最大重试次数({MaxReconnectAttempts}),停止尝试。");}Console.WriteLine("程序结束");}static bool InitializeCamera(VideoCapture capture){if (!capture.IsOpened()){Console.WriteLine("无法打开摄像头!");return false;}// 设置摄像头参数capture.Set(VideoCaptureProperties.FrameWidth, FrameSize.Width);capture.Set(VideoCaptureProperties.FrameHeight, FrameSize.Height);capture.Set(VideoCaptureProperties.Fps, Fps);// 验证实际设置的值double actualWidth = capture.Get(VideoCaptureProperties.FrameWidth);double actualHeight = capture.Get(VideoCaptureProperties.FrameHeight);Console.WriteLine($"摄像头分辨率: {actualWidth}x{actualHeight}");return true;}static bool InitializeVideoWriter(VideoWriter writer, string filename, double fps, Size frameSize){// 尝试几种常见的编码格式Dictionary<string, FourCC> _codecs = new Dictionary<string, FourCC>(){{"X264", FourCC.X264},{"XVID", FourCC.XVID},{"MJPG", FourCC.MJPG},{"H264", FourCC.H264},{"MP4V", FourCC.MP4V},{"DIVX", FourCC.DIVX}};foreach (var codec in _codecs){writer.Open(filename, codec.Value, fps, frameSize, true);if (writer.IsOpened()){Console.WriteLine($"使用编码器: {codec.Key}");return true;}}Console.WriteLine("无法找到合适的视频编码器!");return false;}}
}

4.运行。

整个工程打包下载:

【免费】opencvsharpusb摄像头录像c#H264编码资源-CSDN文库

http://www.lryc.cn/news/2393183.html

相关文章:

  • ch12 课堂参考代码 及 题目参考思路
  • uniapp 实现腾讯云 IM 消息已读回执
  • JavaScript 性能优化按层次逐步分析
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • div或button一些好看实用的 CSS 样式示例
  • USB充电检测仪-2.USB充电检测仪硬件设计
  • 如何查询服务器的端口号
  • AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)
  • DeepSeek R1开源模型的技术突破与AI产业格局的重构
  • 打破认知壁垒重构科技驱动美好生活 大模型义务传播计划
  • 【Web应用】 Java + Vue 前后端开发中的Cookie、Token 和 Swagger介绍
  • 本地部署AI工作流
  • 什么是VR全景相机?如何选择VR全景相机?
  • 如何创建和使用汇编语言,以及下载编译汇编软件(Notepad++,NASM的安装)
  • c++设计模式-单例模式
  • Ubuntu开机自动运行Docker容器中的Qt UI程序
  • Python训练营打卡Day40(2025.5.30)
  • SpringBoot+vue+SSE+Nginx实现消息实时推送
  • python中使用高并发分布式队列库celery的那些坑
  • 哈工大计算机系统大作业 程序人生-Hello’s P2P
  • 计算机一次取数过程分析
  • Halcon联合QT ROI绘制
  • 力扣面试150题--二叉树的右视图
  • 数据绑定页面的完整的原理、逻辑关系、实现路径是什么?页面、表格、字段、属性、值、按钮、事件、模型、脚本、服务编排、连接器等之间的关系又是什么?
  • 江西某石灰石矿边坡自动化监测
  • 《Python 应用中的蓝绿部署与滚动更新:持续集成中的实践与优化》