C# FFmpeg开发说明

       FFmpeg是用C开发的,如果C#要用,可以调用FFmpeg的dll, 但是这样比较复杂,FFmpeg的sdk有很多函数,C#调用C还涉及到数据类型转换,难度很大,不过FFmpeg有C#版本FFmpeg.AutoGen,在项目中可以直接导入使用。

       FFmpeg.AutoGen 项目源码 https://github.com/Ruslan-B/FFmpeg.AutoGen

       该项目用VS2017可以直接编译,解决方案如下图:

       FFmpeg.AutoGen编译时可能会报如下错误:

error NETSDK1045: 当前 .NET SDK 不支持将 .NET Standard 2.1 设置为目标。请将 .NET Standard 2.0 或更低版本设置为目标,或使用支持 .NET Standard 2.1 的 .NET SDK 版本。

        此时需要修改项目文件,右键FFmpeg.AutoGen,  点击【编辑FFmepg.AutoGen.vsproj】,根据相应的错误进行修改,例如我的修改如下:

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

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

    。。。

    。。。

        再次编译就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是个好的选择。程序中的使用方法如下:

点击上面红色框后,选择【浏览】,输入ffmpeg.autogen,安装。         

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐掌门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值