Build 升级ffmpeg时处理ffmpeg库接口更改
我们目前正在尝试升级我们的程序使用的ffmpeg版本。跳跃很大,因为到目前为止我们使用的是ffmpeg 0.8,最新版本是1.2 在这些测试中,我使用了(让我说)我发现的惊人的软件包 作为第一件事,我尝试下载并构建ffmpeg 1.2,当然我得到了很多警告和错误,关于函数和变量不推荐使用或不再存在 为了平滑过渡,我尝试在ffmpeg 1.0上构建,ffmpeg 1.0是最接近于0.8的更高版本。我得到了下面列出的警告和错误列表 我的问题如下:是否有任何指南可以帮助这些转换,在新版本中转换旧的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
编辑: 我正在看这些…
看一看 希望以上内容足以让您开始学习
如果链接失效,以下是全文记录: 我找到了一些关于如何移植旧代码的资源(,和), 但因为这不是我需要的,我决定写我自己的版本。 那么,我们开始吧
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