You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于FFmpeg的代码在Ubuntu GCC编译报错:未识别AVCodecParameters等符号

解决Ubuntu 16.04 GCC编译FFmpeg代码时API/结构体未识别的问题

这问题我在帮人排查FFmpeg跨平台编译时碰到过好多次,核心原因其实很明确:Ubuntu 16.04默认自带的FFmpeg版本太老了。你提到的AVCodecParameters结构体、avcodec_send_packet和avcodec_receive_frame函数,都是FFmpeg 3.1版本才正式引入的新API,而Ubuntu 16.04的官方软件源里,FFmpeg的版本还是2.8.x,根本不支持这些新特性,所以编译时才会报“未声明”的错误。

下面给你两种可行的解决办法,按需选择:

方法一:手动编译安装最新版FFmpeg(推荐)

这种方式能让你获得完整的FFmpeg新API支持,而且版本可控:

  • 先卸载系统自带的旧版FFmpeg及开发库:
    sudo apt remove --purge ffmpeg libavcodec-dev libavformat-dev libavutil-dev
    sudo apt autoremove && sudo apt clean
    
  • 安装编译所需的依赖工具和编码库:
    sudo apt install build-essential yasm cmake libx264-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev
    
  • 下载FFmpeg源码(这里以最新稳定版为例,你也可以去官网选特定版本):
    git clone https://git.ffmpeg.org/ffmpeg.git
    cd ffmpeg
    
  • 配置编译参数(按需开启需要的功能,下面是常用的配置):
    ./configure --prefix=/usr/local --enable-gpl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac --enable-libmp3lame
    
  • 编译并安装(-j$(nproc)会用到所有CPU核心,加速编译):
    make -j$(nproc)
    sudo make install
    
  • 验证安装成功:
    ffmpeg -version
    
    看到版本号在3.1以上就没问题了。之后编译你的代码时,用下面的命令确保链接到新安装的库:
    gcc your_ffmpeg_code.c -o your_program $(pkg-config --cflags --libs libavcodec libavformat libavutil)
    

方法二:通过第三方PPA安装较新的FFmpeg版本(适合不想编译的用户)

如果不想手动编译,可以用第三方PPA直接安装FFmpeg 4.x版本(支持16.04):

  • 添加PPA源:
    sudo add-apt-repository ppa:jonathonf/ffmpeg-4
    
  • 更新软件源并安装:
    sudo apt update && sudo apt install ffmpeg libavcodec-dev libavformat-dev libavutil-dev
    
  • 同样用pkg-config来编译你的代码,确保链接到新安装的库即可。

额外提示

  • 编译前可以先确认当前系统的FFmpeg版本:ffmpeg -version或者pkg-config --modversion libavcodec,确认是不是低于3.1。
  • 如果你的代码里还有其他FFmpeg新API,也要对应确认版本兼容性,避免再次出现类似错误。
  • 要是编译时还是找不到库,可以检查pkg-config的路径,确保能识别到新安装的FFmpeg库。

内容的提问来源于stack exchange,提问作者StarShine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:43:25