当前位置: 代码网 > it编程>编程语言>C# > C#将国产Linux视频录制生成mp4的具体实现

C#将国产Linux视频录制生成mp4的具体实现

2024年09月07日 C# 我要评论
一.技术方案要完成这些功能,具体来说,需要解决如下几个技术问题:(1)麦克风数据采集。(2)摄像头数据采集。(3)音频数据编码。(4)视频数据编码。(5)将编码后的数据按.mp4文件格式写入到文件容器

一.技术方案

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

(1)麦克风数据采集。

(2)摄像头数据采集。

(3)音频数据编码。

(4)视频数据编码。

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

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

我们使用跨平台的 c# .net core ,跨平台的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界面,然后我们就可以录制麦克风摄像头了。

到此这篇关于c#将国产linux视频录制生成mp4的具体实现的文章就介绍到这了,更多相关c# linux视频生成mp4内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com