亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#將國產(chǎn)Linux視頻錄制生成mp4的具體實現(xiàn)

 更新時間:2024年08月21日 09:33:27   作者:!chen  
這篇文章主要介紹了C#將國產(chǎn)Linux視頻錄制生成mp4的具體實現(xiàn),文中通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

一.技術(shù)方案

要完成這些功能,具體來說,需要解決如下幾個技術(shù)問題:

(1)麥克風(fēng)數(shù)據(jù)采集。

(2)攝像頭數(shù)據(jù)采集。

(3)音頻數(shù)據(jù)編碼。

(4)視頻數(shù)據(jù)編碼。

(5)將編碼后的數(shù)據(jù)按.mp4文件格式寫入到文件容器中。

(6)保證音頻視頻播放的同步。

我們使用跨平臺的 C# .NET Core ,跨平臺的UI框架Avalonia,再借助 Oraycn.LinuxCapture 和 Oraycn.MFile.NetCore 這兩個組件,就很容易采集到麥克風(fēng)和攝像頭的數(shù)據(jù),并且將它們編碼寫入到mp4文件中。

我們先看看錄制程序在銀河麒麟上的運行效果:

兩個下拉列表可以選擇要使用的麥克風(fēng)和攝像頭設(shè)備。

點擊“開始”按鈕,麥克風(fēng)和攝像頭將開始采集數(shù)據(jù),并錄制生成mp4文件(在運行目錄下)。

點擊“結(jié)束”按鈕,則將完成錄制,此時可以打開生成的mp4文件進行播放。

二.具體實現(xiàn)

(1)ICameraCapturer是攝像頭視頻采集組件;IMicrophoneCapturer是麥克風(fēng)聲音采集組件。

(2)我們可以通過調(diào)用CapturerFactory的CreateXXXX方法來創(chuàng)建對應(yīng)的采集器實例。

(3)得到采集器實例后,調(diào)用Start方法,即可開始采集;調(diào)用Stop方法,即停止采集。

(4)采集得到的數(shù)據(jù),將通過相應(yīng)的事件(ImageCaptured、AudioCaptured)暴露出來,我們預(yù)定這些事件,即可拿到采集的數(shù)據(jù)。

(5)將拿到的數(shù)據(jù)喂給VideoFileMaker,VideoFileMaker就會將其編碼并寫入到mp4文件中。

我們這里列一下核心代碼,完整的代碼大家可以從文末下載源碼進行了解。

創(chuàng)建并啟動采集器:

            //攝像頭采集器
            this.cameraCapturer = CapturerFactory.CreateCameraCapturer(cameraIndex, videoSize, frameRate);
            this.cameraCapturer.ImageCaptured += CameraCapturer_ImageCaptured;
            this.cameraCapturer.CaptureError += CameraCapturer_CaptureError;
            //麥克風(fēng)采集器
            this.microphoneCapturer = CapturerFactory.CreateMicrophoneCapturer(micIndex);
            this.microphoneCapturer.AudioCaptured += MicrophoneCapturer_AudioCaptured;
            this.microphoneCapturer.CaptureError += MicrophoneCapturer_CaptureError;
 
            this.microphoneCapturer.Start();
            this.cameraCapturer.Start();

創(chuàng)建并啟動錄制器:

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

將采集到的數(shù)據(jù)喂給錄制器:

    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);
    }

三.部署運行

如果要在銀河麒麟或統(tǒng)信UOS上運行這里的錄制程序,則需要現(xiàn)在目標操作系統(tǒng)上安裝.NET Core 3.1。

然后將VS生成目錄下的 netcoreapp3.1 文件夾拷貝到目標電腦上,進入netcoreapp3.1文件夾,打開終端,并在終端中輸入如下命令:

dotnet Oraycn_Avalonias_RecordDemo.Desktop.dll

回車運行后,就會出現(xiàn)前面截圖的UI界面,然后我們就可以錄制麥克風(fēng)攝像頭了。

到此這篇關(guān)于C#將國產(chǎn)Linux視頻錄制生成mp4的具體實現(xiàn)的文章就介紹到這了,更多相關(guān)C# Linux視頻生成mp4內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#動態(tài)查詢之巧用Expression組合多條件表達式的方法和步驟

    C#動態(tài)查詢之巧用Expression組合多條件表達式的方法和步驟

    在C#中,可以使用AndAlso和OrElse方法組合兩個Expression<Func<T, bool>>類型的表達式,下面通過實例代碼給大家分享C#動態(tài)查詢之巧用Expression組合多條件表達式,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C#檢測DataSet是否為空的方法

    C#檢測DataSet是否為空的方法

    這篇文章主要介紹了C#檢測DataSet是否為空的方法,涉及C#操作DataSet的技巧,非常簡單實用,需要的朋友可以參考下
    2015-04-04
  • 深入理解C#中的枚舉

    深入理解C#中的枚舉

    本篇文章主要是對C#中的枚舉進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C# OpenCvSharp實現(xiàn)圖片批量改名

    C# OpenCvSharp實現(xiàn)圖片批量改名

    這篇文章主要為大家詳細介紹了C#如何結(jié)合OpenCvSharp實現(xiàn)圖片批量改名功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C#中使用Override和New關(guān)鍵字進行版本控制

    C#中使用Override和New關(guān)鍵字進行版本控制

    在?C#?中,override?和?new?關(guān)鍵字用于控制類之間的成員方法的隱藏和重寫,理解它們之間的差異和使用場景對于設(shè)計靈活且易于維護的代碼至關(guān)重要,在這篇博客中,我們將詳細探討這兩個關(guān)鍵字的用法,并通過示例來說明它們的實際應(yīng)用,需要的朋友可以參考下
    2024-10-10
  • 如何在C#中使用OpenCV(GOCW使用教程)

    如何在C#中使用OpenCV(GOCW使用教程)

    這篇文章主要介紹了如何在C#中使用OpenCV(GOCW使用教程),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#使用iTextSharp將PDF轉(zhuǎn)成文本的方法

    C#使用iTextSharp將PDF轉(zhuǎn)成文本的方法

    這篇文章主要介紹了C#使用iTextSharp將PDF轉(zhuǎn)成文本的方法,涉及C#操作pdf文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#使用Windows Service的簡單教程(創(chuàng)建、安裝、卸載、調(diào)試)

    C#使用Windows Service的簡單教程(創(chuàng)建、安裝、卸載、調(diào)試)

    這篇文章主要為大家詳細介紹了C#創(chuàng)建、安裝、卸載、調(diào)試Windows Service(Windows 服務(wù))的簡單教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • C# ODP.NET 調(diào)用Oracle函數(shù)返回值時報錯的一個解決方案

    C# ODP.NET 調(diào)用Oracle函數(shù)返回值時報錯的一個解決方案

    這篇文章主要介紹了C# ODP.NET 調(diào)用Oracle函數(shù)返回值時報錯的一個解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解C#如何控制多線程同步執(zhí)行

    詳解C#如何控制多線程同步執(zhí)行

    使用Task類來控制多線程的同步執(zhí)行,可應(yīng)用于多任務(wù)分發(fā)執(zhí)行后,這篇文章主要為大家詳細介紹了C#如何通過Task類控制多線程同步執(zhí)行,感興趣的小伙伴可以了解下
    2023-12-12

最新評論