​MPEG-5是新一代的国际音视频编解码标准,像我们熟悉的MP3、MP4等音视频格式就来自于MPEG系列。MP3格式的说明介绍参见《FFmpeg开发实战:从零基础到短视频上线》一书的“5.2  MP3音频”,MP4格式的说明介绍参见《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.2  音视频文件的封装格式”。

MPEG-5现已开源MPEG-5 EVC的视频编解码器,其中视频解码器的开源库叫libxevd,视频编码器的开源库叫libxeve。如今EVC的编解码器libxevd和libxeve日渐成熟,从7.0版本开始的最新FFmpeg源码已经支持EVC的编解码器libxevd和libxeve。

接下来以微软的视窗系统为例,介绍如何在Windows环境给FFmpeg集成MPEG-5 EVC视频编解码器libxevd和libxeve,具体的操作步骤说明如下:

一、配置libxevd

libxevd是一款MPEG-5的EVC视频解码器。它的源码托管页面在https://github.com/mpeg5/xevd/,最新版本是2024年4月发布的xevd-0.5.0,该版本的源码包下载地址是https://codeload.github.com/mpeg5/xevd/tar.gz/refs/tags/v0.5.0。

libxevd的配置步骤说明如下。

1、下载最新的xevd源码,再把xevd源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:

tar zxvf xevd-0.5.0.tar.gz
cd xevd-0.5.0

2、在xevd目录下创建新文件version.txt,文件内容填入“v0.5.0”,表示解码器的版本为0.5.0。

3、执行下面命令配置xevd:

mkdir build
cd build
cmake ..

配置完毕,会在build目录下找到XEVD.sln,这就是xevd的Visual Studio项目工程文件。

二、编译libxevd

在xevd工程的build目录下创建xevd.def,并往该文件填入以下内容(其中函数列表来自inc\xevd.h定义的函数):

LIBRARY xevd
EXPORTS
  xevd_create
  xevd_delete
  xevd_decode
  xevd_pull
  xevd_config
  xevd_info

打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择xevd-0.5.0\build目录下的XEVD.sln。

打开xevd工程后,右击解决方案管理器的xevd_dynamic模块,右键菜单依次选择:属性→配置属性→链接器→输入,在窗口右侧的模块定义文件栏填写xevd.def的绝对路径。继续依次选择:配置属性→链接器→高级,在窗口右侧的导入库栏填写待生成xevd.lib的绝对路径。完成设置后,单击右下角的确定按钮,保存xevd.def和xevd.lib的路径配置。

依次选择顶部菜单:生成→配置管理器,在打开的配置管理器窗口上,找到左上角的“活动解决方案配置”下拉框,把Debug模式改为Release模式,再单击窗口右下角的关闭按钮。

依次选择顶部菜单:生成→生成→生成xevd_dynamic,Visual Studio就开始编译xevd_dynamic模块。编译过程可在Visual Studio界面下方观察,直到编译完成如下图所示。

此时可在xevd-0.5.0\build\src_main\Release目录下找到xevd.lib和xevd.dll,这两个文件就是编译生成的libxevd库文件。

三、安装libxevd

确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3  Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装libxevd。

1、在msys64的/usr/local目录下新建libxevd目录,并在该目录下创建lib子目录;

2、把xevd工程中build\src_main\Release目录下的xevd.lib和xevd.dll复制到第一步创建的lib目录;

3、在lib目录下创建pkgconfig子目录,并把xevd工程的build\xevd.pc复制到pkgconfig目录;然后打开xevd.pc,把开头四行改成下面这样。

prefix=/usr/local/libxevd
exec_prefix=${prefix}/bin
libdir=${prefix}/lib
includedir=${prefix}/include

4、在msys64的/usr/local/libxevd目录下创建include目录,然后把xevd工程中inc\xevd.h和build\xevd_exports.h复制到刚才创建的include目录;

经过以上步骤操作后的libxevd目录结构如下所示。

/usr/local/libxevd
 |--------------- lib
 |                 |----- xevd.lib
 |                 |----- xevd.dll
 |                 |----- pkgconfig
 |                           |----- xevd.pc
 |--------------- include
 |                 |----- xevd.h
 |                 |----- xevd_exports.h

四、配置libxeve

libxeve是一款MPEG-5的EVC视频编码器。它的源码托管页面在https://github.com/mpeg5/xeve/,最新版本是2024年6月发布的xeve-0.5.1,该版本的源码包下载地址是https://codeload.github.com/mpeg5/xeve/tar.gz/refs/tags/v0.5.1。

注意:由于FFmpeg仅支持版本号大于等于0.5.1的libxeve,因此务必下载xeve-0.5.1,不可下载xeve-0.5.0。

libxeve的配置步骤说明如下。

1、下载最新的xeve源码,再把xeve源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:

tar zxvf xeve-0.5.1.tar.gz
cd xeve-0.5.1

2、在xeve目录下创建新文件version.txt,文件内容填入“v0.5.1”,表示编码器的版本为0.5.1。

3、执行下面命令配置xeve:

mkdir build
cd build
cmake ..

配置完毕,会在build目录下找到XEVE.sln,这就是xeve的Visual Studio项目工程文件。

五、编译libxeve

在xeve工程的build目录下创建xeve.def,并往该文件填入以下内容(其中函数列表来自inc\xeve.h定义的函数):

LIBRARY xeve
EXPORTS
  xeve_create
  xeve_delete
  xeve_push
  xeve_encode
  xeve_config
  xeve_param_default
  xeve_param_ppt
  xeve_param_check
  xeve_param_parse

打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择xeve-0.5.1\build目录下的XEVE.sln。

打开xeve工程后,右击解决方案管理器的xeve_dynamic模块,右键菜单依次选择:属性→配置属性→链接器→输入,在窗口右侧的模块定义文件栏填写xeve.def的绝对路径。继续依次选择:配置属性→链接器→高级,在窗口右侧的导入库栏填写待生成xeve.lib的绝对路径。完成设置后,单击右下角的确定按钮,保存xeve.def和xeve.lib的路径配置。

依次选择顶部菜单:生成→配置管理器,在打开的配置管理器窗口上,找到左上角的“活动解决方案配置”下拉框,把Debug模式改为Release模式,再单击窗口右下角的关闭按钮。

依次选择顶部菜单:生成→生成→生成xeve_dynamic,Visual Studio就开始编译xeve_dynamic模块。编译过程可在Visual Studio界面下方观察,直到编译完成如下图所示。

此时可在xeve-0.5.1\build\src_main\Release目录下找到xeve.lib和xeve.dll,这两个文件就是编译生成的libxeve库文件。

六、安装libxeve

确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3  Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装libxeve。

1、在msys64的/usr/local目录下新建libxeve目录,并在该目录下创建lib子目录;

2、把xeve工程中build\src_main\Release目录下的xeve.lib和xeve.dll复制到第一步创建的lib目录;

3、在lib目录下创建pkgconfig子目录,并把xeve工程的build\xeve.pc复制到pkgconfig目录;然后打开xeve.pc,把开头四行改成下面这样。

prefix=/usr/local/libxeve
exec_prefix=${prefix}/bin
libdir=${prefix}/lib
includedir=${prefix}/include

4、在msys64的/usr/local/libxeve目录下创建include目录,然后把xeve工程中inc\xeve.h和build\xeve_exports.h复制到刚才创建的include目录;

经过以上步骤操作后的libxeve目录结构如下所示。

/usr/local/libxeve
 |--------------- lib
 |                 |----- xeve.lib
 |                 |----- xeve.dll
 |                 |----- pkgconfig
 |                           |----- xeve.pc
 |--------------- include
 |                 |----- xeve.h
 |                 |----- xeve_exports.h

七、编译安装FFmpeg

先下载最新的FFmpeg源码(版本号需大于等于7.0),再把FFmpeg源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:

cd /usr/local/src
unzip ffmpeg-n7.1.1.zip

确保MSYS环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第八章的“8.1.1  给FFmpeg集成x264”和“8.1.5  给FFmpeg集成x265”安装了H.264的编码器libx264和H.265的编码器libx265,也按照该书第十章的“10.1.1  FFmpeg集成SDL”安装了Windows系统的SDL2库,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行下面命令配置FFmpeg的编译环境:

cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/libxevd/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-libxevd --enable-libxeve --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

配置完毕执行下面命令编译和安装FFmpeg,编译完成的ffmpeg库将会安装到configure指定的/usr/local/ffmpeg目录。

make
make install
cp /usr/local/libxevd/lib/xevd.dll /usr/local/ffmpeg/bin
cp /usr/local/libxeve/lib/xeve.dll /usr/local/ffmpeg/bin

八、查看FFmpeg的安装结果

运行下面命令查看FFmpeg的安装版本:

ffmpeg -version

上面命令返回的FFmpeg版本信息如下:

ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-libxevd --enable-libxeve --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.101 / 61. 19.101
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到“--enable-libxevd --enable-libxeve”,说明FFmpeg已经启用了MPEG-5 EVC视频编解码器libxevd和libxeve。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

FFmpeg开发笔记(七十三)Windows给FFmpeg集成MPEG-5视频编解码器的更多相关文章

  1. FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

    前言   本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8.   FFmpeg简介   FFmpeg是领先的多媒体框架,能够解码 ...

  2. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  4. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  6. FFmpeg开发笔记(二)搭建Windows系统的开发环境

    由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的.不过若有已经 ...

  7. FFmpeg开发笔记(一)搭建Linux系统的开发环境

    对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库.不过考虑到刚开始仅仅调用 ...

  8. FFmpeg开发实战(一):FFmpeg 打印日志

    在Visual Studio 开发(二):VS 2017配置FFmpeg开发环境一文中,我们配置好了FFmpeg的开发环境,下面我们开始边实战,边学习FFmpeg. 首先,我们要学习的就是FFmpeg ...

  9. Java开发笔记(十三)利用关系运算符比较大小

    前面在<Java开发笔记(九)赋值运算符及其演化>中提到,Java编程中的等号“=”表示赋值操作,并非数学上的等式涵义.Java通过等式符号“==”表示左右两边相等,对应数学的等号“=”: ...

  10. FFmpeg开发实战(二):FFmpeg 文件操作

    FFmpeg 提供了丰富的API供我们使用,下面我们来讲述一下文件操作相关的API: FFmpeg 删除文件:avpriv_io_delete() FFmpeg 重命名文件:avpriv_io_mov ...

随机推荐

  1. ChirpStack 设备连通性测试极简工具

    一.工具简介 你是否为调试 ChirpStack 设备数据连通性而烦恼?是否希望快速验证数据解析逻辑而无需复杂部署?这个 ChirpStack 数据连通性测试工具,算是一个极简解决方案! 无论是 Ch ...

  2. 为了掌握设计模式,开发了一款Markdown 文本编辑器软件(已开源)

    设计模式实战项目:Markdown 文本编辑器软件开发(已开源) 一.项目简介 项目名称:YtyMark-java 本项目是一款基于 Java 语言 和 JavaFX 图形界面框架 开发的 Markd ...

  3. 三维装箱问题(3D Bin Packing Problem, 3D-BPP)

    提出问题 集装箱海运家具, 沙发, 茶几, 椅子等等, 有多少套家具,以及每个家具的长宽高都会告诉你. 把所有的家具都装进集装箱里, 要求通过算法算出一共需要多少集装箱. 1.要考虑怎样装, 需要的集 ...

  4. SpringMVC框架第一天

    目录 SpringMVC的基本概念 三层架构和MVC 三层架构 MVC模型 MVC概述 SpringMVC是什么 SpringMVC在三层架构的位置 SpringMVC的优势 SpringMVC的入门 ...

  5. windows快速开启【程序和功能】

    程序和功能一般常用的操作是对软件进行卸载. 方式一: 1. Win+R打开运行 2. 输入appwiz.cpl命令 方式二: 1.Win+X打开快捷开关 2. F进去应用和功能 3.点击右侧程序和功能 ...

  6. 代码随想录第八天| Leecode 344. 反转字符串、Leecode 541 反转字符串 II

    Leecode 344 反转字符串 题目链接:https://leetcode.cn/problems/reverse-string/description/ 题目描述 编写一个函数,其作用是将输入的 ...

  7. JTextField限制输入数据类型(java GUI)

    package javaBasic; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Co ...

  8. A* 合集

    板子那篇烂尾了,等 \(25\) 年 \(csp\) 时再继续写吧 CF1620E Replace the Numbers 点击查看代码 #include<bits/stdc++.h> u ...

  9. 浅析领域驱动模型VO、DTO、BO、PO 等的概念、区别及其用法

    摘要:浅析POJO.DTO.DO.VO.BO.PO和Entity等的概念.区别及其用法. 名词解释   领域模型中的实体类分为四种模型:VO.DTO.DO和PO,各种实体类用于不同业务层次间的交互,并 ...

  10. 面试题:Java并发编程生产者和消费者有序消费问题

    摘要:对于一个资源对象,必须先生产再消费,消费后再生产,如此循环往复.为了解决这个并发问题,提供两种解决方案,一是使用synchronized关键字和Object对象的监听器,二是使用java.uti ...