近期我参与了部门底层库依赖的 FFmpeg 从 3.4 升级至 7.0.2 的工作在此分享一些经验和遇到的 API 变动。将 FFmpeg 升级到高版本后编译过程中遇到大量报错是常态。这些错误通常源于 API 接口变更或结构体字段调整。此时不必惊慌核心解决思路是将报错的接口或用法适配到新版本。如何快速准确地找到新版本中的对应替代方案 以下是我找到的一些方法FFmpeg 官方文档 查找任何 API 用法和参数说明的最权威来源。FFmpeg 废弃 API 文档这是解决升级问题的有效资源。文档详细列出了当前版本如 7.0相比旧版本废弃的 API、结构体成员、宏等并且明确指明了应该使用的新接口或替代方案。互联网搜索与 AI 辅助如果在官方文档中没有找到直接的答案特别是对于一些隐晦的变更或行为差异搜索引擎和开发者社区Stack Overflow 等是重要的补充。像 DeepSeek 这类 AI 助手也是高效的查询工具能快速提供可能的替代方案或解释变更背景。源码探索最后手段如果以上途径都未能解决问题这种情况极少遇到最后的办法是深入源码。主要思路是先定位旧版本中相关 API/结构体的源码实现然后在高版本 FFmpeg 源码的对应位置或通过搜索相关功能关键词查看新版本是如何实现相同功能的。这需要一定的源码阅读能力。在完成本次升级后我整理了遇到的一些API变动。以下表格概述了这些变更及其影响/替代方案详细说明请参考官方文档和废弃列表变更类型旧版 API/字段新版 API/字段备注/参考Packet 初始化av_init_packetav_packet_alloc内部调用get_packet_defaults参考帧时间戳字段AVFrame::pkt_ptsAVFrame::pts参考编解码器参数类型AVCodec*const AVCodec*高版本函数普遍使用const修饰符全局注册函数av_register_all自动注册输入输出设备仍需avdevice_register_all()参考声道布局表示channels字段ch_layout结构体更精确的声道描述方式音频重采样上下文创建swr_alloc_set_optsswr_alloc_set_opts2统一接口支持更多参数内存分配函数av_mallocz_arrayav_calloc参考内存管理头文件libavutil/mem.h内部实现mem_internal.h不再作为公共头文件导出解复用器遍历旧版迭代方式av_demuxer_iterateMLT 框架适配示例 参考音频重采样接口audio_resampleswr_convert参考流创建参数avformat_new_stream的codec参数无效参考解码接口avcodec_decode_video2/audio4avcodec_send_packetavcodec_receive_frame参考索引访问方式AVStream::nb_index_entries/index_entriesavformat_index_get_entries_count()avformat_index_get_entry()参考