当前位置: 首页 > news >正文

FFmpeg 升级指北

近期我参与了部门底层库依赖的 FFmpeg 从 3.4 升级至 7.0.2 的工作,在此分享一些经验和遇到的 API 变动。

将 FFmpeg 升级到高版本后,编译过程中遇到大量报错是常态。这些错误通常源于 API 接口变更或结构体字段调整。此时不必惊慌,核心解决思路是将报错的接口或用法适配到新版本。

如何快速准确地找到新版本中的对应替代方案? 以下是我找到的一些方法:

  1. FFmpeg 官方文档 :查找任何 API 用法和参数说明的最权威来源。

  2. FFmpeg 废弃 API 文档:这是解决升级问题的有效资源。文档详细列出了当前版本(如 7.0)相比旧版本废弃的 API、结构体成员、宏等,并且明确指明了应该使用的新接口或替代方案。

  3. 互联网搜索与 AI 辅助:如果在官方文档中没有找到直接的答案(特别是对于一些隐晦的变更或行为差异),搜索引擎和开发者社区(Stack Overflow 等)是重要的补充。像 DeepSeek 这类 AI 助手也是高效的查询工具,能快速提供可能的替代方案或解释变更背景。

  4. 源码探索(最后手段):如果以上途径都未能解决问题(这种情况极少遇到),最后的办法是深入源码。主要思路是先定位旧版本中相关 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_streamcodec 参数无效参考
解码接口avcodec_decode_video2/audio4avcodec_send_packet + avcodec_receive_frame参考
索引访问方式AVStream::nb_index_entries/index_entriesavformat_index_get_entries_count() + avformat_index_get_entry()参考
http://www.dtcms.com/a/267011.html

相关文章:

  • 【网络与系统安全】强制访问控制——Biba模型
  • AI生成式软件工程正处在从“辅助编程”到“AI原生开发”的范式转移
  • 使用坚果云扩容Zotero同步空间的简单快捷方法
  • Vue3-组件化-Vue核心思想之一
  • Python 中的余数运算及数论中的同余定理
  • 五层协议介绍
  • 指针篇(7)- 指针运算笔试题(阿里巴巴)
  • CSS——圆形头像外嵌光圈
  • springsecurity02
  • js中的FileReader对象
  • ESP32CAM通过ESPHome接入HomeAssistant(含无线刷固件等)
  • Python-GUI-wxPython-控件
  • 语音大模型速览(一)F5-TTS
  • 《汇编语言:基于X86处理器》第6章 复习题和练习,编程练习
  • Selenium 安装使用教程
  • Python 量化交易安装使用教程
  • 深度学习3(向量化编程+ python中实现逻辑回归)
  • 遗传算法的原理与实现示例
  • XION:玩转您的第一个智能合约
  • Seq2seq+Attention 机器翻译
  • Go中使用国家新闻出版署实名认证
  • [C++] # 深入理解C++继承:从原理到实现
  • 通过网页调用身份证阅读器http websocket方法-华视电子————仙盟创梦IDE
  • 结构型智能科技的关键可行性——信息型智能向结构型智能的转换(提纲)
  • CSS知识复习2
  • 3-1 PID算法改进(积分部分)
  • Softhub软件下载站实战开发(十二):软件管理编辑页面实现
  • 科学的第五范式:人工智能如何重塑发现之疆
  • 力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
  • 【Qt】QxORM无法删除和更改主键值为0的行,否则报错:invalid primary key