weixin_43907340 2024-04-11 16:29 采纳率: 50%
浏览 75
已结题

ffmpeg.autogen使用问题

1、FFmpeg.AutoGen6.1.0.1,
2、https://github.com/BtbN/FFmpeg-Builds/releases上下载最新的链接库文件ffmpeg-master-latest-win64-gpl-shared.zip,不知道版本对不对?
3、已经设置rootpath.

        //获取当前软件启动的位置
        var currentFolder = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
        //ffmpeg在项目中放置的位置
        var probe = Path.Combine("FFmpeg", "bin", Environment.Is64BitOperatingSystem ? "x64" : "x86");
        while (currentFolder != null)
        {
            var ffmpegBinaryPath = Path.Combine(currentFolder, probe);
            if (Directory.Exists(ffmpegBinaryPath))
            {
                //找到dll放置的目录,并赋值给rootPath;
                ffmpeg.RootPath = ffmpegBinaryPath;
                return;
            }
            currentFolder = Directory.GetParent(currentFolder)?.FullName;
        }
        //旧版本需要要调用这个方法来注册dll文件,新版本已经会自动注册了
        //ffmpeg.avdevice_register_all();
    }

4、 调用ffmpeg.avformat_alloc_context()时报错,提示不支持指定的方法。是不是下载的库不对?有没有可用的链接

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-11 16:29
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试将 FFmpeg.AutoGen 集成到你的 C# 项目中,但遇到了一些问题。首先,确保你使用的 FFmpeg.AutoGen 版本与你下载的 FFmpeg 库是兼容的。FFmpeg.AutoGen 是一个用于 .NET 的 FFmpeg 绑定库,它需要与 FFmpeg 库本身的版本相匹配才能正常工作。

    根据你的描述,你已经设置了根路径,这通常是正确的做法。然而,错误可能来源于以下几个方面:

    1. FFmpeg 版本:确保你从 https://github.com/BtbN/FFmpeg-Builds/releases 下载的 FFmpeg 库与你的 FFmpeg.AutoGen 版本兼容。如果你不确定,可以下载官方提供的预编译库,例如 ffmpeg-6.1.1-essentials_build_win64-gpl.exe(适用于 6.1.1 版本)。

    2. DLL 注册:对于较新的 FFmpeg.AutoGen 版本,通常不需要手动注册 DLL 文件。确保你没有在代码中调用 ffmpeg.avdevice_register_all(),因为这可能会导致冲突。

    3. API 使用avformat_alloc_context 方法可能在某些版本中被重命名或者移除。请检查 FFmpeg.AutoGen 文档,确保你正在使用的 API 与库版本兼容。如果你不确定如何正确地创建格式上下文,请参考以下示例代码:

    using FFmpeg.AutoGen;
    
    public class FFMpegHelper
    {
        static unsafe void Main(string[] args)
        {
            ffmpeg.av_log_set_level(ffmpeg.AV_LOG_QUIET); // 设置日志级别,防止输出过多信息
    
            // 初始化 FFmpeg 系统
            ffmpeg.av_register_all();
            ffmpeg.avcodec_register_all();
            ffmpeg.avformat_network_init();
    
            try
            {
                // 创建格式上下文
                AVFormatContext* formatContext = ffmpeg.avformat_alloc_context();
                
                // 如果分配失败,打印错误并退出
                if (formatContext == null)
                {
                    string errorBuffer = new string((sbyte*)ffmpeg.av_strerror(ffmpeg.AVERROR_UNKNOWN, null, 0), System.Text.Encoding.UTF8);
                    Console.WriteLine($"Error allocating context: {errorBuffer}");
                    return;
                }
    
                // 在这里添加更多的初始化操作...
    
                // 当不再需要时,释放资源
                ffmpeg.avformat_free_context(formatContext);
            }
            finally
            {
                // 清理 FFmpeg 系统
                ffmpeg.avformat_network_deinit();
                ffmpeg.avcodec_close_all();
                ffmpeg.av_register_all(); // 可能需要再次调用以清理所有注册的解码器和容器
            }
        }
    }
    

    这段代码展示了如何正确地初始化 FFmpeg,创建格式上下文以及在完成后清理资源。如果你仍然遇到问题,请检查 FFmpeg.AutoGen 的文档,或者查看官方示例代码以了解更详细的使用方法。

    记得在你的项目中引用 FFmpeg.AutoGen 和对应的 FFmpeg 库文件,确保它们都已正确添加到项目的依赖项中。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月30日
  • 修改了问题 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥18 help me! 希望大家来看看 吉~
  • ¥15 C++显示超限兔子集结
  • ¥15 sql server 2012的下载出错
  • ¥15 图像识别用户软件开发
  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv