C# FFmpeg開發說明

       FFmpeg是用C開發的,若是C#要用,能夠調用FFmpeg的dll, 可是這樣比較複雜,FFmpeg的sdk有不少函數,C#調用C還涉及到數據類型轉換,難度很大,不過FFmpeg有C#版本FFmpeg.AutoGen,在項目中能夠直接導入使用。git

       FFmpeg.AutoGen 項目源碼 https://github.com/Ruslan-B/FFmpeg.AutoGengithub

       該項目用VS2017能夠直接編譯,解決方案以下圖:數據結構

       FFmpeg.AutoGen編譯時可能會報以下錯誤:函數

error NETSDK1045: 當前 .NET SDK 不支持將 .NET Standard 2.1 設置爲目標。請將 .NET Standard 2.0 或更低版本設置爲目標,或使用支持 .NET Standard 2.1 的 .NET SDK 版本。this

        此時須要修改項目文件,右鍵FFmpeg.AutoGen,  點擊【編輯FFmepg.AutoGen.vsproj】,根據相應的錯誤進行修改,例如個人修改以下:code

<Project Sdk="Microsoft.NET.Sdk">orm

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
    <PackageId>FFmpeg.AutoGen</PackageId>

blog

    。。。開發

    。。。get

        再次編譯就ok了。

        查看項目屬性可知,FFmpeg.AutoGen是dll項目,其它兩個是應用程序。

        該項目就是把FFmpeg dll以C#的形式作了一次封裝,把FFmpeg的相關數據結構,類型,宏等都作了轉換,以便在C#項目中使用。例如FFmpeg.AutoGen項目的FFmpeg.functions.export.g.cs 該文件封裝了FFmpeg的大部分API,該文件寫了一個靜態類ffmpeg, 項目調用時,能夠直接調用它的成員方法,好比av_register_all()方法的封裝:

C#代碼:

public static void av_register_all()
        {
            av_register_all_fptr();
        }

 av_register_all_fptr()代碼:

private static av_register_all_delegate av_register_all_fptr = () =>
        {
            av_register_all_fptr = GetFunctionDelegate<av_register_all_delegate>(GetOrLoadLibrary("avformat"), "av_register_all");
            if (av_register_all_fptr == null)
            {
                av_register_all_fptr = delegate 
                {
                    throw new PlatformNotSupportedException("av_register_all is not supported on this platform.");
                };
            }
            av_register_all_fptr();
        };

           從以上代碼能夠看出,這是直接從ffmpeg的avformat.dll直接導出API.

           若是想用C# FFmpeg開發項目,FFmpeg.AutoGen是個好的選擇。

相關文章
相關標籤/搜索