欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WPF使用Accord實現(xiàn)屏幕錄制功能

 更新時間:2024年03月05日 10:50:55   作者:WPF開發(fā)者  
這篇文章主要為大家詳細(xì)介紹了WPF如何使用Accord實現(xiàn)屏幕錄制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下

WPF 使用 Accord 實現(xiàn)屏幕錄制

框架使用.NET4

Visual Studio 2022

WPF 實現(xiàn)調(diào)用 FFmpeg 實現(xiàn)屏幕錄制

WPF 實現(xiàn)調(diào)用 WindowsAPI 實現(xiàn)屏幕錄制

Accord 源碼地址

此篇使用 Accord 實現(xiàn)屏幕錄制,此次使用了三個庫Accord、Accord.VideoAccord.FFMPEG

Accord: 開源的機器學(xué)習(xí)框架,它提供了一系列用于數(shù)據(jù)處理、圖像處理、機器學(xué)習(xí)和統(tǒng)計分析的工具和庫。

Accord.Video:提供了處理視頻數(shù)據(jù),并提供了對視頻文件的讀取、處理和分析功能。

Accord.FFMPEG: 提供了對 FFmpeg 功能的封裝和集成,提供音視頻處理功能,如視頻轉(zhuǎn)碼、格式轉(zhuǎn)換、流媒體處理等。

使用的版本為 3.8.0

實現(xiàn)代碼

1)新增 AccordHelper 代碼如下:

  • 定義 ScreenCaptureStream 對象用于捕獲屏幕內(nèi)容。
  • 定義了一個 VideoFileWriter 對象用于將捕獲到的屏幕內(nèi)容寫入視頻文件。
  • 在 Start() 方法中,創(chuàng)建 ScreenCaptureStream 對象,并指定捕獲屏幕的區(qū)域為整個屏幕。
  • 然后再創(chuàng)建了一個 VideoFileWriter 對象,并指定了輸出視頻文件的路徑、寬度高度、幀率、視頻編解碼器比特率。
  • 設(shè)置捕獲屏幕幀的間隔為 40 毫秒。
  • 設(shè)置視頻比特率為 1200 * 1000 ,如果設(shè)置較高的比特率視頻會更加清晰,但是文件也會相對增大。
  • 注冊了 NewFrame 事件處理程序,當(dāng)有新的幀捕獲時,將該幀就寫入視頻文件。
  • 在 Stop() 方法中,檢查 screenShot 和 videoWriter 是否為 null,如果不為 null,則分別停止屏幕捕獲和關(guān)閉視頻寫入。
using Accord.Math;
using Accord.Video;
using Accord.Video.FFMPEG;
using System;
using System.Windows;

namespace DesktopRecord.Helper
{
    public class AccordHelper
    {
        static ScreenCaptureStream screenStream;
        static VideoFileWriter videoWriter;
        public static void Start()
        {
            var workArea = SystemParameters.WorkArea.Size;
            var width = (int)workArea.Width;
            var height = (int)workArea.Height;
            var rectangle = new System.Drawing.Rectangle(0, 0, width, height);
            screenStream = new ScreenCaptureStream(rectangle);
            videoWriter = new VideoFileWriter();
            var filePath = $"{Environment.CurrentDirectory}/DesktopRecord_{DateTime.Now.ToString("yyyyMMddHHmmss")}.avi";
            var framerate = new Rational(1000, screenStream.FrameInterval);
            var videoBitRate = 1200 * 1000;
            videoWriter.Open(filePath, width, height, framerate, VideoCodec.MSMPEG4v3, videoBitRate);
            screenStream.FrameInterval = 40;
            screenStream.NewFrame += ScreenStream_NewFrame;
            screenStream.Start();
        }

        private static void ScreenStream_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            if (videoWriter == null) return;
            videoWriter.WriteVideoFrame(eventArgs.Frame);
        }

        public static void Stop()
        {
            if (screenStream != null)
            {
                screenStream.Stop();
                screenStream = null;
            }
            if (videoWriter != null)
            {
                videoWriter.Close();
                videoWriter.Dispose();
                videoWriter = null;
            }
        }
    }
}

2)新增 CommOptionView.xaml 代碼如下:

<UserControl
    x:Class="DesktopRecord.View.CommOptionView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:DesktopRecord.View"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <Grid>
        <StackPanel
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Orientation="Horizontal">
            <Button
                Margin="0,0,5,0"
                Command="{Binding RecordCommand}"
                Content="開始錄制"
                Style="{StaticResource WD.SuccessPrimaryButton}" />
            <Button
                Margin="5,0,0,0"
                wd:Loading.IsShow="{Binding IsShow}"
                wd:Loading.LoadingType="Normal"
                Command="{Binding RecordStopCommand}"
                Content="停止錄制"
                Style="{StaticResource WD.DangerPrimaryButton}" />
        </StackPanel>
    </Grid>
</UserControl>

3)修改 MainWindow.xaml 代碼如下:

            <TabItem Height="35" Header="WindowsAPI 錄制">
                <view:CommOptionView>
                    <view:CommOptionView.DataContext>
                        <vm:MainVM RecordEnums="WindowsAPI" />
                    </view:CommOptionView.DataContext>
                </view:CommOptionView>
            </TabItem>
            <TabItem Height="35" Header="Accord 錄制">
                <view:CommOptionView>
                    <view:CommOptionView.DataContext>
                        <vm:MainVM RecordEnums="Accord" />
                    </view:CommOptionView.DataContext>
                </view:CommOptionView>
            </TabItem>

效果圖

以上就是WPF使用Accord實現(xiàn)屏幕錄制功能的詳細(xì)內(nèi)容,更多關(guān)于WPF屏幕錄制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# FileStream復(fù)制大文件

    C# FileStream復(fù)制大文件

    這篇文章主要為大家詳細(xì)介紹了C# FileStream復(fù)制大文件的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C#中Socket通信用法實例詳解

    C#中Socket通信用法實例詳解

    這篇文章主要介紹了C#中Socket通信用法,以實例形式較為詳細(xì)的分析了UDP及TCP兩種通信方式的具體實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 詳解C#實現(xiàn)在Excel單元格中應(yīng)用多種字體格式

    詳解C#實現(xiàn)在Excel單元格中應(yīng)用多種字體格式

    在Excel中,可對單元格中的字符串設(shè)置多種不同樣式。本文,將以C#及VB.NET代碼為例,介紹如何在Excel同一個單元格中應(yīng)用多種字體樣式,感興趣的可以了解一下
    2022-05-05
  • C#中Kestrel和IIS服務(wù)器下的同步與異步配置

    C#中Kestrel和IIS服務(wù)器下的同步與異步配置

    本篇文章主要講解什么是Kestrel和IIS服務(wù)器和特點,以及他們?nèi)绾闻渲猛脚c異步,具有一定的參加價值,感興趣的可以了解一下
    2023-08-08
  • C#中三種Timer計時器的詳細(xì)用法

    C#中三種Timer計時器的詳細(xì)用法

    這篇文章介紹了C#中三種Timer計時器的詳細(xì)用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#中Equality和Identity淺析

    C#中Equality和Identity淺析

    這篇文章主要介紹了C#中Equality和Identity淺析,本文先是講解了Equality和Identity的定義,同時講解了判斷兩個對象等價性的4種方法,需要的朋友可以參考下
    2014-12-12
  • C#使用前序遍歷、中序遍歷和后序遍歷打印二叉樹的方法

    C#使用前序遍歷、中序遍歷和后序遍歷打印二叉樹的方法

    這篇文章主要介紹了C#使用前序遍歷、中序遍歷和后序遍歷打印二叉樹的方法,涉及C#遍歷二叉樹的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • WPF實現(xiàn)繪制3D圖形的示例代碼

    WPF實現(xiàn)繪制3D圖形的示例代碼

    WPF的3D功能可以在不編寫任何c#代碼的情況下進行繪制,只需要使用xaml即可完成3D圖形的渲染。本文主要講述了WPF-3D中的關(guān)鍵概念, 以及常用到的命中測試、2d控件如何在3D對象中進行渲染,希望大家有所幫助
    2023-03-03
  • C#通過流寫入數(shù)據(jù)到文件的方法

    C#通過流寫入數(shù)據(jù)到文件的方法

    這篇文章主要介紹了C#通過流寫入數(shù)據(jù)到文件的方法,涉及C#通過字節(jié)流讀寫文件的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 基于C#調(diào)用OCX控件的常用方法(推薦)

    基于C#調(diào)用OCX控件的常用方法(推薦)

    下面小編就為大家分享一篇基于C#調(diào)用OCX控件的常用方法推薦,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評論