首页 > 系统相关 >C#实现信创国产Linux桌面录制成MP4(源码,银河麒麟、统信UOS)

C#实现信创国产Linux桌面录制成MP4(源码,银河麒麟、统信UOS)

时间:2024-09-23 16:47:29浏览次数:7  
标签:UOS 桌面 C# 录制 采集 mp4 源码 图像

信创国产化已是大势所趋,在国产操作系统上的应用开发的需求越来越多,比如,有客户需要在银河麒麟和统信UOS上实现录制桌面生成一个mp4文件。那么这个要如何实现了?

一. 技术方案

要完成这些功能,具体来说,需要解决如下几个技术问题:

(1)桌面图像数据采集。

(2)视频数据编码(H264)。

(3)将编码后的数据按.mp4文件格式写入到文件容器中。

我们使用跨平台的 .NET Core (C#),跨平台的UI框架CPF.NET,再借助 Oraycn.LinuxCapture 和 Oraycn.MFile.NetCore 这两个组件,就很容易采集国产操作系统的桌面图像数据,并且将它们编码写入到mp4文件中。

我们先看看桌面录制程序在银河麒麟上的运行效果:

点击“启动设备”按钮,将启动桌面图像采集线程,以30fps的帧率采集桌面图像。

点击“开始录制”按钮,会初始化录制组件,然后将采集到的桌面图像录制生成mp4文件(在运行目录下)。

点击“结束录制”按钮,则将完成录制,此时可以打开生成的mp4文件进行播放。

二.具体实现

(1)IDesktopCapturer是桌面图像采集组件。

(2)我们可以通过调用CapturerFactory的CreateDesktopCapturer方法来创建采集器实例。

(3)得到采集器实例后,调用Start方法,即可开始采集;调用Stop方法,即停止采集。

(4)采集得到的数据,将通过相应的事件(ImageCaptured)暴露出来,我们预定这些事件,即可拿到采集的数据。

(5)将拿到的数据喂给VideoFileMaker,VideoFileMaker就会将其编码并写入到mp4文件中。

我们这里列一下核心代码,完整的代码大家可以从文末下载源码进行了解。

创建并启动采集器:

 private void OpenDevice()
 { 
     this.desktopCapturer = CapturerFactory.CreateDesktopCapturer(frameRate);
     this.desktopCapturer.ImageCaptured += DesktopCapturer_ImageCaptured;
     videoSize = this.desktopCapturer.VideoSize;
     this.desktopCapturer.Start();
 }

创建并启动录制器:

private void StartRecord()
{
    string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + ESBasic.Helpers.FileHelper.GetFilePathSeparatorChar().ToString(); 
    this.silenceVideoFileMaker = new SilenceVideoFileMaker();
    this.silenceVideoFileMaker.Initialize(desktopPath+"test.mp4", VideoCodecType.H264, videoSize.Width, videoSize.Height, frameRate, VideoQuality.Middle);
    this.recording = true;
    this.tip.Visibility = Visibility.Visible;
}

将采集到的数据喂给录制器:

private void DesktopCapturer_ImageCaptured(byte[] obj)
{ 
    if(this.recording)
    {
        this.silenceVideoFileMaker.AddVideoFrame(obj);
    }
}

停止录制:

private void StopRecord()
{
    this.recording = false;
    this.silenceVideoFileMaker.Close(true);
    this.startRecordBtn.IsHitTestVisible = true;
    this.tip.Visibility = Visibility.Collapsed;
}

三. 部署运行

如果要在银河麒麟或统信UOS上运行这里的录制程序,则需要先在目标操作系统上安装.NET Core 3.1。

然后将VS生成目录下的 netcoreapp3.1 文件夹拷贝到目标电脑上,进入netcoreapp3.1文件夹,打开终端,并在终端中输入如下命令:

dotnet Oraycn.CPF.RecordDemo.dll

回车运行后,就会出现前面截图的UI界面,然后我们就可以录制桌面图像了。

四. 源码下载

Oraycn.CPF.RecordDemo.rar

源码中包含的非托管库是X64架构的,如果需要在其它架构的国产芯片上运行该程序,可以联系我获取对应架构的非托管库。

 

标签:UOS,桌面,C#,录制,采集,mp4,源码,图像
From: https://www.cnblogs.com/shawshank/p/18427307

相关文章

  • array_reduce实现路由中间件
    <?phpinterfaceMiddleware{publicstaticfunctionhandle(Closure$next);}classMiddleware1implementsMiddleware{publicstaticfunctionhandle(Closure$next){echo"Middleware1before\n";$next();......
  • 高灵敏度电容式触摸IC在弹簧触控按键中的应用
    电容式触摸IC-弹簧触控按键-是通过检测人体与传感器之间的电容变化来实现触摸控制。这种技术具有高灵敏度、稳定性好、防水性强等优点,广泛应用于家用电器、消费电子、工业控制等领域。弹簧触控按键的特点:高灵敏度:即使隔着绝缘材料(如玻璃、塑料等),也能准确检测到手指的触摸。稳......
  • CentOS 9 安装 google Chrome Web 浏览器的一种简单方法(2024.9)
    我自己选择了一个简单的方法。1.高级上网,到google的Chrome下载网页,下载Linux的安装包,google-chrome-stable_current_x86_64.rpm,109M如网址:https://www.google.com/intl/en_uk/chrome/next-steps.html?platform=linux&statcb=0&installdataindex=empty&defaultbrowser=0附百度......
  • code blocks Makefile
    1)“File->New->Project”,选择“EmptyProject”并创建。2)选中Project,右键,选择“Addfiles”,将c/c++和headfiles加入工程。3)选中Project,右键,选择“Properties”,“Projectsettings”选项卡中的“Makefile”填入     Makefile文件名,并勾选“Thisisacustom......
  • 非洲猪瘟pcr检测仪的功能
    非洲猪瘟PCR检测仪是一种专门用于检测非洲猪瘟病毒(ASFV)的先进设备,它基于聚合酶链反应(PCR)技术,能够快速、准确地识别病毒的存在。以下是非洲猪瘟PCR检测仪的主要功能:1.快速检测非洲猪瘟PCR检测仪能够在短时间内完成检测过程,通常只需几个小时,大大提高了诊断和监测工作的效率。......
  • CF2001D Color Rows and Columns
    题目链接题解知识点:贪心,STL。显然,子序列最长长度是数的种类数,即保证每个数都会被选到。子序列的奇数位要尽可能大、偶数位尽可能小。我们从左到右依次选择子序列的数,为了保证每个数都能被选到,我们预处理出每个数的最晚出现位置\(lst\)。每次选择,只有在当前还未选择的数的\(......
  • Codeforces Round 972(Div.2)题解
    CodeforcesRound972(Div.2)题解A.SimplePalindrome贪心贪心,尽可能元素数量平均,并且相同字母放在一起。#include<bits/stdc++.h>usingnamespacestd;#definefffirst#definesssecond#definepbpush_back#defineall(u)u.begin(),u.end()#defineendl'\n'#de......
  • PARTIV-Oracle数据库存储结构-物理存储结构
    11.物理存储结构11.1.物理存储结构简介11.1.1.存储数据库文件的机制11.1.2.Oracle自动存储管理(OracleASM)11.1.3.Oracle管理文件和用户管理文件11.2.数据文件简介11.2.1.数据文件用途11.2.2.永久数据文件和临时数据文件11.2.3.联机和离线数据文件11.2.4.数据文......
  • C语言之switch-case语句
    既然有了if、else组合为什么还需要switch、case组合呢?不要拿青龙偃月刀去削苹果那你既然有了菜刀为什么还需要水果刀呢?一把好刀是一个厨子的很重要的东西,而在做菜时不可能只有一把刀,有的刀适合切菜,有的刀适合剁肉,有的刀适合剔骨......if、else一般表示两个分支或是......
  • wincc利用VBS脚本读取SQL数据库中的数值
    一、建立wincc项目变量建立的变量可以是内部变量,目的是为了用VBS脚本读写变量,跟SQL数据库里的变量建立链接。二、创建SQL数据库1、单击connect(连接)按钮,注意服务器的名称必须是XXX\WINCC的格式;这一步注意要看电脑里有没有安装数据库管理软件,没有的话需要安装一下,WINCC默认会......