Build 升级ffmpeg时处理ffmpeg库接口更改

Build 升级ffmpeg时处理ffmpeg库接口更改,build,ffmpeg,upgrade,deprecated,Build,Ffmpeg,Upgrade,Deprecated,我们目前正在尝试升级我们的程序使用的ffmpeg版本。跳跃很大,因为到目前为止我们使用的是ffmpeg 0.8,最新版本是1.2 在这些测试中,我使用了(让我说)我发现的惊人的软件包 作为第一件事,我尝试下载并构建ffmpeg 1.2,当然我得到了很多警告和错误,关于函数和变量不推荐使用或不再存在 为了平滑过渡,我尝试在ffmpeg 1.0上构建,ffmpeg 1.0是最接近于0.8的更高版本。我得到了下面列出的警告和错误列表 我的问题如下:是否有任何指南可以帮助这些转换,在新版本中转换旧的ff

我们目前正在尝试升级我们的程序使用的ffmpeg版本。跳跃很大,因为到目前为止我们使用的是ffmpeg 0.8,最新版本是1.2

在这些测试中,我使用了(让我说)我发现的惊人的软件包

作为第一件事,我尝试下载并构建ffmpeg 1.2,当然我得到了很多警告和错误,关于函数和变量不推荐使用或不再存在

为了平滑过渡,我尝试在ffmpeg 1.0上构建,ffmpeg 1.0是最接近于0.8的更高版本。我得到了下面列出的警告和错误列表

我的问题如下:是否有任何指南可以帮助这些转换,在新版本中转换旧的ffmpeg范例/函数调用?因为我们讨论了很多我没有编写的代码,我不想逐行分析,如果可以将旧函数调用转换为新函数调用,我会非常高兴,变量也是如此

下面是警告和错误列表(我已经清理了它,因此每个错误/警告只有一个条目)


编辑:

我正在看这些…






看一看

希望以上内容足以让您开始学习


如果链接失效,以下是全文记录:

我找到了一些关于如何移植旧代码的资源(,和), 但因为这不是我需要的,我决定写我自己的版本。 那么,我们开始吧

url\u open()

此功能已更改为avio_open。还有url\u close 更名为avio_close。这是我在这里找到的信息

av\u new\u stream()

从FFMPEG 1.0.1开始,此功能仍受支持,但已标记 正如不赞成的那样。它将被avformat_new_stream()替换。假设 旧代码是:

AVStream *st = av_new_stream(oc, i);
修改后的代码应为:

AVStream *st = avformat_new_stream(oc, NULL);
st->id = i
首先要小心检查st不是空的

dump\u format()

此函数已重命名为av_dump_format()

av\u write\u头()

替换为接受两个参数的avformat_write_header() 而不是一个。将NULL作为第二个参数传递以获得相同的值 将行为更改为旧函数

av\u codec\u open()

这一个被av_codec_open2()替换。替代功能 接受三个参数而不是两个,但将NULL作为第三个参数 参数以获得与旧函数相同的行为

avcodec\u encode\u audio()

替换为avcodec_encode_audio2()

av\u设置参数()

我没办法找到这个的替代品。首先,我发现 此函数没有替换项。但那是在它还在的时候 在FFMPEG中可用,即使已弃用。然后把它拆了,, 因此,它必须有替代品。在某些地方,我发现 他们只禁用了它,其他人则必须传递它的参数 要格式化\写入\头,请执行以下操作。最后,我放弃了,因为我不需要 这部分代码目前的工作版本。就我而言 调用avformat_alloc_context(),然后调用av_set_parameters(),最后 我看到的是调用avformat_alloc_output_context2() avformat_alloc_context()的。但变化不是微不足道的,所以我 跳过了

SampleFormat

此枚举已重命名为AVSampleFormat

URL\u WRONLY

此常量已替换为AVIO_FLAG_WRITE

SAMPLE\u FMT\u U8、SAMPLE\u FMT\u S16、SAMPLE\u FMT\u S32等。

现在它们的前缀是AV,所以使用AV样本FMT U8, AV_样本_FMT_S16等


正如Gabi指出的,该URL具有大多数已弃用常量的替换项

但是,它缺少一些,因此我将发布您的输出指示的所有更改,这些更改是完成此编译步骤所必需的:

avcodec_init -> avcodec_register_all
av_open_input_file -> avformat_open_input
这里可能值得注意的是,av_set_参数已被弃用并完全废弃,因此您现在应该在调用avformat_open_input时指定参数

AVFormatContext.file_size -> avio_size()
URL_WRONLY -> AVIO_FLAG_WRITE
url_fopen -> avio_open
url_fclose -> avio_close
SAMPLE_FMT_U8 -> AV_SAMPLE_FMT_U8
SAMPLE_FMT_S16 -> AV_SAMPLE_FMT_S16
SAMPLE_FMT_S32 -> AV_SAMPLE_FMT_S32
SAMPLE_FMT_FLT -> AV_SAMPLE_FMT_FLT
FF_I_TYPE -> AV_PICTURE_TYPE_I

这应该涵盖你所有的实际错误。如果只是一个警告,那就花点时间弄清楚他们正在逐步采取什么行动

还有,很遗憾,我不能同时给出两个答案。我会接受你的(更完整),并奖励另一个(最大的相对贡献),非常感谢!哈哈,这有点不合常规,但有道理。谢谢
avcodec_init -> avcodec_register_all
av_open_input_file -> avformat_open_input
AVFormatContext.file_size -> avio_size()
URL_WRONLY -> AVIO_FLAG_WRITE
url_fopen -> avio_open
url_fclose -> avio_close
SAMPLE_FMT_U8 -> AV_SAMPLE_FMT_U8
SAMPLE_FMT_S16 -> AV_SAMPLE_FMT_S16
SAMPLE_FMT_S32 -> AV_SAMPLE_FMT_S32
SAMPLE_FMT_FLT -> AV_SAMPLE_FMT_FLT
FF_I_TYPE -> AV_PICTURE_TYPE_I