C#+AForge 實現視頻錄制

C#+AForge 實現視頻錄制

? 在C#中,使用AForge 庫實現視頻錄制功能是一個比較直接的過程。AForge 是一個開源的.NET框架,提供了許多用于處理圖像和視頻的類庫。

在這里插入圖片描述

開發步驟

安裝AForge庫

? 首先,確保你的項目中已經安裝了 AForge.VideoAForge.Video.FFMPEG.你可以通過NuGet包管理器來實現安裝這些庫:

  1. 打開你的Visual Studio 項目
  2. 轉到工具->NuGet包管理器->管理解決方案的NuGet包
  3. 搜索并安裝 AForgeAForge.Video 以及 AForge.Video.FFMPEG

在這里插入圖片描述

打開與關閉攝像頭

/// <summary>
/// 打開攝像頭
/// </summary>
private void OpenCamera()
{//設置視頻源并啟動this.videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[this.comboBox1.SelectedIndex].MonikerString);this.videoSourcePlayer1.VideoSource = this.videoCaptureDevice;this.videoSourcePlayer1.Start();isOpen = true;this.btnOpen.Text = "關閉";
}/// <summary>
/// 關閉攝像頭
/// </summary>
private void CloseCamera()
{if (this.videoSourcePlayer1.VideoSource != null){this.videoSourcePlayer1.SignalToStop();this.videoSourcePlayer1.WaitForStop();this.videoSourcePlayer1.VideoSource = null;isOpen = false;this.btnOpen.Text = "打開";}
}

實現拍照

/// <summary>
/// 拍照
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{if (!this.isOpen){MessageBox.Show("請先打開攝像頭!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);return;}try{//拍照bmp = this.videoSourcePlayer1.GetCurrentVideoFrame();this.pictureBox1.Image = bmp;if (!Directory.Exists("images"))Directory.CreateDirectory("images");string fileName = string.Format("images/圖片_{0}.jpg", DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss"));bmp.Save(fileName);}catch (Exception ex){MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);}
}

實現錄像

/// <summary>
/// 開始錄像
/// </summary>
private void StartRecord()
{if (!Directory.Exists("videos"))Directory.CreateDirectory("videos");string fileName = string.Format("videos/錄像_{0}.avi", DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss"));this.videoFileName = fileName;// 創建視頻文件寫入器videoWriter = new VideoFileWriter();videoSourcePlayer1.NewFrame += VideoSourcePlayer1_NewFrame;videoWriter.Open(fileName, 1280, 960, 30, VideoCodec.MPEG4, 1000000); // 設置分辨率、幀率和比特率
}/// <summary>
/// 停止錄像
/// </summary>
private void StopRecord()
{this.CloseCamera();if (videoWriter != null){videoWriter.Close();videoWriter = null;}this.FlushVideoPlayList();
}

實現錄屏

/// <summary>
/// 開始錄屏
/// </summary>
/// <param name="path"></param>
public void StartRecording(string path) //該方法需要有一個路徑參數,前面我們設置過了
{var directory = Path.GetDirectoryName(path);if (!Directory.Exists(directory)) //檢查路徑是否存在,不存在就自動創建{Directory.CreateDirectory(directory);}try{FrmMain.videoWriter = new VideoFileWriter();//用于生成視頻文件,參數分別為路徑、視頻的寬度、高度、幀數、編碼格式以及視頻碼率FrmMain.videoWriter.Open(path, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, 25, VideoCodec.MPEG4, 5000000);recordingThread = new Thread(RecordScreen);recordingThread.Start();}catch (Exception err){Console.WriteLine(err.ToString());MessageBox.Show("屏幕錄制開啟失敗: " + err.Message, "提示!");}
}/// <summary>
/// 停止錄屏
/// </summary>
public void StopRecording()
{try{recordingThread.Join();FrmMain.videoWriter.Close();}catch (Exception err){MessageBox.Show("屏幕錄制停止失敗: " + err.Message, "提示!");Console.WriteLine(err.ToString());}
}

視頻播放

在這里插入圖片描述

/// <summary>
/// 雙擊視頻列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{if (this.listBox1.SelectedItem == null) return;this.axWindowsMediaPlayer1.URL = string.Format("videos/{0}", this.listBox1.SelectedItem.ToString());
}

object sender, MouseEventArgs e)
{
if (this.listBox1.SelectedItem == null) return;

this.axWindowsMediaPlayer1.URL = string.Format("videos/{0}", this.listBox1.SelectedItem.ToString());

}


# 源碼下載
CSDN: [C#+AForge 實現視頻下載](https://download.csdn.net/download/m0_37631902/90477114?spm=1001.2014.3001.5503)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897645.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897645.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897645.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP框架加載不上.env文件中的變量

以lumen5.5框架為例&#xff0c;根目錄中bootstrap文件夾下的app.php文件中 (new Dotenv\Dotenv(__DIR__./../))->load(); 是讀取所有.env中的文件的&#xff0c;這個是正常的&#xff0c;但是在代碼中的任何位置或者在config目錄下的databases.php里&#xff0c;代碼如…

21.Linux 線程庫的使用與封裝

在linux內核中并沒有線程的概念&#xff0c;只有輕量級進程LWP的概念&#xff0c;linux下的線程都是是由LWP進行模擬實現的。因此linux操作系統中不會提供線程的相關接口&#xff0c;只會提供輕量級線程的接口&#xff08;如vfork&#xff0c;clone等&#xff09;。但是在我們的…

Aliyun CTF 2025 web 復現

文章目錄 ezoj打卡OKoffens1veFakejump server ezoj 進來一看是算法題&#xff0c;先做了試試看,gpt寫了一個高效代碼通過了 通過后沒看見啥&#xff0c;根據頁面底部提示去/source看到源代碼&#xff0c;沒啥思路&#xff0c;直接看wp吧&#xff0c;跟算法題沒啥關系,關鍵是去…

《鴻蒙系統下AI模型訓練加速:時間成本的深度剖析與優化策略》

在當今數字化浪潮中&#xff0c;鴻蒙系統憑借其獨特的分布式架構與強大的生態潛力&#xff0c;為人工智能的發展注入了新的活力。隨著AI應用在鴻蒙系統上的日益普及&#xff0c;如何有效降低模型訓練的時間成本&#xff0c;成為了開發者與研究者們亟待攻克的關鍵課題。這不僅關…

Git使用(一)--如何在 Windows 上安裝 Git:詳細步驟指南

如果你想在 Windows 機器上安裝 Git&#xff0c;可以按照以下詳細指南進行操作。 第一步&#xff1a;下載 Git 可通過官網下載 適用于 Windows 的 Git 最新版本。 如果下載速度較慢&#xff0c;可以通過下面提供的百度網盤 鏈接下載安裝包&#xff0c; https://git-scm.com/d…

基于Prometheus+Grafana的Deepseek性能監控實戰

文章目錄 1. 為什么需要專門的大模型監控?2. 技術棧組成2.1 vLLM(推理引擎層)2.2 Prometheus(監控采集層)2.3 Grafana(數據可視化平臺)3. 監控系統架構4. 實施步驟4.1 啟動DeepSeek-R1模型4.2 部署 Prometheus4.2.1 拉取鏡像4.2.2 編寫配置文件4.2.3 啟動容器4.3 部署 G…

本地Git倉庫搭建(DevStar)與Git基本命令

本地Git倉庫搭建&#xff08;DevStar&#xff09;與Git基本命令 實驗環境搭建平臺Git基本命令的使用本地倉庫的創建代碼提交代碼合并版本發布 總結 實驗環境 搭建平臺 按照DevStar的Github倉庫要求&#xff0c;在終端中執行下列命令&#xff0c;即可成功安裝DevStar到本地部署…

stm32 藍橋杯 物聯網 獨立鍵盤的使用

在藍橋杯物聯網平臺里面&#xff0c;有5個外接設備&#xff0c;其中有一個就是6個獨立按鍵。首先&#xff0c;我們先看一下按鍵有關的電路圖。 電路圖與cubemx設定 由圖可見&#xff0c;獨立鍵盤組由兩行三列構成&#xff0c;我們通過行列來鎖定要訪問的獨立按鍵在哪。ROW1掛…

set_clock_groups

一、命令參數與工具處理邏輯 核心參數定義 參數定義工具行為工具兼容性-asynchronous完全異步時鐘組&#xff0c;無任何相位或頻率關系&#xff08;如獨立晶振、不同時鐘樹&#xff09;工具完全禁用組間路徑的時序分析&#xff0c;但需用戶自行處理跨時鐘域&#xff08;CDC&a…

工作記錄 2017-01-06

工作記錄 2017-01-06 序號 工作 相關人員 1 協助BPO進行Billing的工作。 修改CSV、EDI837的導入。 修改郵件上的問題。 更新RD服務器。 郝 修改的問題&#xff1a; 1、 In “Full Job Summary” (patient info.), sometime, the Visit->Facility is missed, then …

Adaptive AUTOSAR UCM模塊——快速入門

Adaptive AUTOSAR中的UCM模塊介紹 概述 Adaptive AUTOSAR(AUTomotive Open System ARchitecture)是一個開放的行業標準,旨在為現代汽車電子系統提供一個靈活且可擴展的軟件框架。在這個框架中,更新與配置管理(Update and Configuration Management, UCM)模塊扮演著至關…

解決跨域問題的6種方案

解決跨域問題&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是 Web 開發中常見的需求&#xff0c;以下是 6 種主流解決方案&#xff0c;涵蓋前端、后端和服務器配置等不同層面&#xff1a; 一、CORS&#xff08;跨域資源共享&#xff09; 原理 通過服務器設置…

Python Selenium庫入門使用,圖文詳細。附網頁爬蟲、web自動化操作等實戰操作。

文章目錄 前言1 創建conda環境安裝Selenium庫2 瀏覽器驅動下載&#xff08;以Chrome和Edge為例&#xff09;3 基礎使用&#xff08;以Chrome為例演示&#xff09;3.1 與瀏覽器相關的操作3.1.1 打開/關閉瀏覽器3.1.2 訪問指定域名的網頁3.1.3 控制瀏覽器的窗口大小3.1.4 前進/后…

50個經典的python庫

本文整理了50個可以迅速掌握的經典Python庫&#xff0c;了解它們的用途&#xff0c;無論你是剛踏上編程之路&#xff0c;還是希望在Python的世界里更加深入&#xff0c;這50個庫都能幫助你快速起飛。 1. Taipy Taipy是一個開源Python庫&#xff0c;用于輕松的端到端應用程序開…

【視頻】V4L2、ffmpeg、OpenCV中對YUV的定義

1、常見的YUV格式 1.1 YUV420 每像素16位 IMC1:YYYYYYYY VV-- UU– IMC3:YYYYYYYY UU-- VV– 每像素12位 I420: YYYYYYYY UU VV =>YUV420P YV12: YYYYYYYY VV UU =>YUV420P NV12: YYYYYYYY UV UV =>YUV420SP(最受歡迎格式) NV21: YYYYYYYY VU VU =>YUV420SP…

freeswitch(多臺服務器級聯)

親測版本centos 7.9系統–》 freeswitch1.10.9本人freeswitch安裝路徑(根據自己的路徑進入)/usr/local/freeswitch/etc/freeswitch使用場景: 使用服務器級聯需要雙方網絡可以ping通,也就是類似局域網內,比如A服務器IP 192.168.1.100 B服務器 192.168.1.101,通過C設備注冊…

SpringMVC 基本概念與代碼示例

1. SpringMVC 簡介 SpringMVC 是 Spring 框架中的一個 Web 層框架&#xff0c;基于 MVC&#xff08;Model-View-Controller&#xff09; 設計模式&#xff0c;提供了清晰的分層結構&#xff0c;適用于 Web 應用開發 SpringMVC 主要組件 DispatcherServlet&#xff08;前端控…

LuaJIT 學習(1)—— LuaJIT介紹

文章目錄 介紹Extensions Modulesbit.* — Bitwise operationsffi.* — FFI libraryjit.* — JIT compiler controlC API extensionsProfiler Enhanced Standard Library Functionsxpcall(f, err [,args...]) passes arguments例子&#xff1a; xpcall 的使用 load*() handle U…

std::ranges::views::common, std::ranges::common_view

std::ranges::views::common, std::ranges::common_view C20 引入的用于將范圍適配為“通用范圍”的工具&#xff0c;主要解決某些算法需要傳統迭代器對&#xff08;如 begin 和 end 類型相同&#xff09;的問題。 基本概念 1. 功能 適配傳統算法&#xff1a;將范圍&#x…

4.3 數組和集合的初始及賦值

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商業目的 版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商…