实现信创Linux麦克风摄像头录制(源码,银河麒麟、统信UOS)

news2024/12/23 3:25:49

随着信创国产化浪潮的来临,在国产操作系统上的应用开发的需求越来越多,其中一个就是需要在银河麒麟或统信UOS上实现录制摄像头视频和麦克风声音,将它们录制成一个mp4文件。那么这个要如何实现了?

一. 技术方案

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

(1)麦克风数据采集。

(2)摄像头数据采集。

(3)音频数据编码。

(4)视频数据编码。

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

(6)保证音频视频播放的同步。

我们使用跨平台的 .NET Core (C#),跨平台的UI框架Avalonia,再借助 Oraycn.LinuxCapture 和 Oraycn.MFile.NetCore 这两个组件,就很容易采集到麦克风和摄像头的数据,并且将它们编码写入到mp4文件中。

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

在银河麒麟上运行视频录制程序

两个下拉列表可以选择要使用的麦克风和摄像头设备。

点击“开始”按钮,麦克风和摄像头将开始采集数据,并录制生成mp4文件(在运行目录下)。

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

二.具体实现

(1)ICameraCapturer是摄像头视频采集组件;IMicrophoneCapturer是麦克风声音采集组件。

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

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

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

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

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

创建并启动采集器:

            //摄像头采集器
            this.cameraCapturer = CapturerFactory.CreateCameraCapturer(cameraIndex, videoSize, frameRate);
            this.cameraCapturer.ImageCaptured += CameraCapturer_ImageCaptured;
            this.cameraCapturer.CaptureError += CameraCapturer_CaptureError;
            //麦克风采集器
            this.microphoneCapturer = CapturerFactory.CreateMicrophoneCapturer(micIndex);
            this.microphoneCapturer.AudioCaptured += MicrophoneCapturer_AudioCaptured;
            this.microphoneCapturer.CaptureError += MicrophoneCapturer_CaptureError;

            this.microphoneCapturer.Start();
            this.cameraCapturer.Start();

创建并启动录制器:

            this.videoFileMaker = new VideoFileMaker();
            this.videoFileMaker.Initialize("test.mp4", VideoCodecType.H264, videoSize.Width, videoSize.Height, frameRate, VideoQuality.High, AudioCodecType.AAC, audioSampleRate, channelCount, true);

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

    private void CameraCapturer_ImageCaptured(byte[] obj)
    {
        if (this.isRecording)
        {
            this.videoFileMaker.AddVideoFrame(obj);
        }
    }

    private void MicrophoneCapturer_AudioCaptured(byte[] obj)
    {
        if (this.isRecording)
        {
            this.videoFileMaker.AddAudioFrame(obj);
        }
    }

停止录制:

    private void FinishRecorded(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
    {
        this.RecordState_Changed(false);
        this.cameraCapturer?.Stop();
        this.cameraCapturer?.Dispose();
        this.microphoneCapturer?.Stop();
        this.microphoneCapturer?.Dispose();
        this.videoFileMaker?.Close(true);
        MessageBox.Show("录制完成!", this);
    }

三. 部署运行

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

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

dotnet Oraycn_Avalonias_RecordDemo.Desktop.dll

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

四. 源码下载

Oraycn.Avalonias.RecordDemo.rar

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北大研究生公选课资料现已公开,数据库学习秘籍速来get!

为促进基础软件在中国高校的传播,进一步提高在校研究生对基础软件的学习和开发实践能力,拓数派与开源联盟 PG 分会携手合作,走进北京大学,进行了北大软件与微电子学院 2024 年《北京大学 PostgreSQL 内核开发:从入门到…

构建高效沃尔玛自养号测评系统:技术策略与实战指南

搭建沃尔玛自养号测评技术系统是一个涉及多方面技术和资源投入的过程,旨在通过自行构建和掌控测评环境,利用真实国外买家的信息和资料来创建买家账号,模拟真实的购买和评价过程,从而提升商品权重和销量。以下是搭建该系统的主要步…

mysql Ubuntu安装与远程连接配置

一、安装(Ubuntu22环境安装mysql8) 这里使用Xshell链接Ubuntu和mysql windows进行操作,特别提醒:安装之前建议对Ubuntu快照处理备份,避免安装中出错导致Ubuntu崩溃。 查看是否安装的有可以用指令:ps -ef|…

IOS 05 OC和Swift混合编程

为什么需要使用OC和Swift混合编程? 在真实项目开发过程中,大部分时候我们往往都会使用到OC和Swift混合编程,主要原因如下: 老项目是OC语言实现的,但需要引用Swift的框架;新项目是Swift实现的,…

【操作系统】二、进程管理:1.进程与线程(程序、进程(PCB、状态转换、原语、进程间通信)、线程(多线程模型))

二、进程与线程 文章目录 二、进程与线程1.程序1.1顺序执行的特征1.2并发执行的特征 2.进程Process2.1定义(组织)2.1.1程序段2.1.2数据段2.1.3进程控制块PCB1)内容2)作用3)进程组织方式 2.2特征2.3进程的状态与转换2.3…

云服务器是什么?云服务器可以用来干什么?

云服务器,顾名思义,是指运行在云计算环境中的虚拟服务器。与传统的物理服务器相比,云服务器不需要用户自行购买、搭建和维护硬件设备,而是通过互联网从云服务提供商处获取计算资源、存储空间和网络服务。用户可以根据自己的需求&a…

spring揭秘05-ApplicationContext

文章目录 【README】【1】ApplicationContext概述【1.1】spring通过Resource对文件抽象【1.2】统一资源加载策略-ResourceLoader【1.2.1】 DefaultResourceLoader【1.2.2】FileSystemResourceLoader【1.2.3】 ResourcePatternResolver批量加载资源【1.2.4】Resource与ResourceL…

使用住宅代理抓取奥运奖牌新闻,全面掌握赛事精彩瞬间

引言 什么是新闻抓取?目的是什么? 新闻抓取有哪些好处? 为什么需要关注奥运奖牌新闻? 如何进行新闻抓取——以Google 新闻为例 总结 引言 近日,巴黎奥运会圆满落幕,在这16天中,全球顶尖运…

一问讲透什么是 RAG,为什么需要 RAG?

一. 为什么要用 RAG ? 如果使用 pretrain 好的 LLM 模型,应用在你个人的情境中,势必会有些词不达意的地方,例如问 LLM 你个人的信息,那么它会无法回答;这种情况在企业内部也是一样,例如使用 LLM 来回答企业…

VTK—vtkRectilinearGrid学习

vtkRectilinearGrid理解为沿着坐标轴方向一系列规格的网格,但是网格间距可以不同。需要显式的提供各坐标轴的点数据。单元数据不用指定,会隐式生成。与前面提到的vtkStructuredGrid 类似,但是每个网格线都是直的。 1.给三个坐标分配点&#…

Golang基于DTM的分布式事务SAGA实战

SAGA介绍 SAGA是“长时间事务”运作效率的方法,大致思路是把一个大事务分解为可以交错运行的一系列子事务的集合。原本提出 SAGA 的目的,是为了避免大事务长时间锁定数据库的资源,后来才逐渐发展成将一个分布式环境中的大事务,分…

关于tresos Studio(EB)的MCAL配置之DIO

General Dio Development Error Detect开发者错误检测 Dio Flip Channel Api翻转通道电平接口Dio_FlipChannel是否启用 Dio Version Info Api决定Dio_GetVersionInfo接口是否启用,一般打开就行。 Dio Reverse Port Bits让端口的位(通道)进…

最新号卡推广单页源码/仿制手机卡流量卡号卡代理推广源码/简洁实用/带弹窗公告+后台管理

源码简介: 最新号卡推广单页源码,它是手机卡流量卡号卡代理推广源码量身打造的,不仅设计得简洁实用,而且还有炫酷的弹窗公告功能和强大的后台管理系统哦! 一款号卡推广单页源码,自己仿制来的,…

arcgis-坡度坡向分析

坡向的描述有定性和定量两种方式,定量是以东为0,顺时针递增,南为90,西为180,北为270等,范围在0~35959′59″之间。 定性描述有8方向法和4方向法. 8 方向为东、东南、南、西南、西、西北、北、东…

Linux安装jdk8,tomcat和mysql

目录 Linux安装jdk8 第一步:下载jdk8 第二步:把下载好的压缩包通过finalShell发送到linux虚拟机上 ​编辑 第三步:解压缩 第四步:配置环境变量 第五步:重新加载profile配置文件 第六步:检查是否安装成…

C++ -- 负载均衡式在线OJ (三)

文章目录 四、oj_server模块1. oj_server的功能路由2. 建立文件版的题库3. model模块4.controller模块5.judge模块(负载均衡)6.view模块整体代码结构(前端的东西,不是重点) 五、最终效果项目源码 前面部分请看这里C –…

Unite Shanghai 2024 团结引擎专场 | 团结引擎实时全局光照

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中,Unity 中国高级技术经理周赫带大家深入解析了团结引擎的实时全局光照系统。该系统支持完全动态的场景、动态材质和动态灯光的 GI 渲染,包括无限次弹射的漫反射和镜面反射 GI。 周赫&…

2024年职场常备!3款高效数据恢复软件免费版,让打工人工作无忧

嘿,职场的朋友们!咱们现在工作,数据就跟空气一样重要,对吧?但有时候,手一滑,文件没了,硬盘突然就挂了,系统也闹点小情绪,那心情,比股市大跌还难受…

基于Django的boss直聘数据分析可视化系统的设计与实现

研究背景 随着互联网的发展,在线招聘平台逐渐成为求职者与企业之间的重要桥梁。Boss直聘作为国内领先的招聘平台,以其独特的直聊模式和高效的匹配算法,吸引了大量的用户。然而,随着平台用户的增长,海量的招聘数据带来…

基于Faster-RCNN的停车场空位检测,支持图像和视频检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于Faster-RCNN的停车场空位检测系统,支持图像检测和视频检测(pytorch框架)_哔哩哔哩_bilibili (一)简介 基于Faster-RCNN的停车场空位检测系统是在pytorch框架下实现的,这是一个…