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

ops/2024/9/24 9:32:05/

信创国产化已是大势所趋,在国产操作系统上的应用开发的需求越来越多,比如,有客户需要在银河麒麟和统信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架构的,如果需要在其它架构的国产芯片上运行该程序,可以联系我获取对应架构的非托管库。


http://www.ppmy.cn/ops/115221.html

相关文章

Centos安装helm

Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。 两种安装方式,二进制安装、脚本安装。脚本安装服务器在下载安装包可能会下载失败。 脚本安装 官网提供了脚本安装 $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/sc…

9.20-使用k8s部署wordpress项目

部署wordpress项目 部署mariadb # 启动docker进程systemctl start docker​# 拉取三个镜像​docker pull nginx:alpinedocker pull wordpress:latestdocker pull mariadb:latest​# 保存三个镜像​cddocker save -o wordpress.tar wordpress:latestdocker save -o mariadb.tar…

边缘计算网关在工业中的应用

在工业4.0和智能制造的浪潮中,边缘计算网关扮演着至关重要的角色。AIoTedge边缘计算网关,作为工业互联网的关键组件,通过其强大的数据处理能力和智能分析功能,正在改变工业生产的面貌。 边缘计算网关的定义与角色 边缘计算网关是…

Docker配置代理解决pull超时问题

操作系统: CentOS Linux 8 Docker版本: 26.1.3 前置:你需拥有🐱 1. 配置 proxy.conf 1.1 创建配置文件目录 创建 docker.service.d,进入到 docker.service.d 中打开 proxy.conf (没有文件打开会自动创建)。 注意:每个人的路径可…

Docker学习

文章目录 1. 快速入门1.1 配置Docker的yum库1.2 安装docker1.3 启动和校验1.4 安装MySQL1.5 常用命令 2. Docker基础2.1 常见命令2.2 数据卷2.3 本地目录挂载2.4 自定义镜像2.4.1 镜像结构2.4.2 Dockerfile2.4.3 构建镜像 2.5 网络 3. 项目部署3.1 DockerCompose3.1.2 基本语法…

python中网络爬虫框架

Python 中有许多强大的网络爬虫框架,它们帮助开发者轻松地抓取和处理网页数据。最常用的 Python 网络爬虫框架有以下几个: 1. Scrapy Scrapy 是 Python 中最受欢迎的网络爬虫框架之一,专为大规模网络爬取和数据提取任务而设计。它功能强大、…

Java后端中的文件上传与下载:大文件处理的优化与安全考虑

Java后端中的文件上传与下载:大文件处理的优化与安全考虑 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java后端中的文件上传与下载,特别是大文件处理…

Golang Beego+Vue打造的高校科研工作管理系统,让信息发布更及时,项目管理更透明

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…