FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器

简介: AVS3是中国首个8K及5G视频编码标准,相比AVS2和HEVC性能提升约30%。解码器libuavs3d支持8K/60P视频实时解码,兼容多种平台。《FFmpeg开发实战》书中介绍了在Windows环境下如何集成libuavs3d到FFmpeg。集成步骤包括下载源码、使用Visual Studio 2022编译、调整配置、安装库文件和头文件,以及重新配置和编译FFmpeg以启用libuavs3d。

AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准。AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制订工作,参考软件的测试表明,AVS3基准档次的性能比上一代标准AVS2和HEVC提升了约30%。

libuavs3d是AVS3标准的解码器,最高可支持8K/60P视频实时解码,支持windows/linux/arm/ios等所有常用平台,在移动端最高支持4K/30fps视频实时解码,解码速度大幅领先AV1开源解码器dav1d和aomdec。
在《FFmpeg开发实战:从零基础到短视频上线》一书的“8.1.2 给FFmpeg集成avs2”介绍了如何在Windows环境给FFmpeg集成AVS2的编解码器,其实也能给FFmpeg集成AVS3的解码器libuavs3d。详细的集成步骤说明如下。

一、编译AVS3的解码器libuavs3d

libuavs3d的源码托管在 https://github.com/uavs3/uavs3d ,注意要下载master的主干代码,不可下载2019年的1.0版本代码(该版本的源码编译有问题)。主干代码的下载地址是 https://codeload.github.com/uavs3/uavs3d/zip/refs/heads/master ,把该链接复制到浏览器地址再按回车键,即可开始下载源码包。
libuavs3d的编译步骤说明如下。
1、解压下载好的压缩包,双击运行uavs3d-master源码目录下的version.bat,以便生成头文件version.h。
2、启动Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择uavs3d-master/build/vs2017目录下的uavs3d.sln。
3、等待Visual Studio打开uavs3d-master工程,依次选择顶部菜单“生成”→“配置管理器”,在打开的配置管理器界面上,找到左上角的“活动解决方案配置”下拉框,把Debug模式改为Release模式,再单击右下角的关闭按钮。
4、右击界面右侧解决方案列表中的common,选择右键菜单底部的“属性”。在弹出的属性窗口中,将右侧常规属性列表中的“Windows SDK 版本”这项改为“10.0(最新安装的版本)”,将“平台工具集”这项改为“Visual Studio 2022(v143)”,目的是把这两项的值改为自己电脑上的版本。

libuavs3d-vs2022.png

5、右击界面右侧解决方案列表中的libuavs3d,选择右键菜单底部的“属性”。在弹出的属性窗口中,将右侧常规属性列表中的“Windows SDK 版本”这项改为“10.0(最新安装的版本)”,将“平台工具集”这项改为“Visual Studio 2022(v143)”,目的是把这两项的值改为自己电脑上的版本。

6、单击界面右侧解决方案列表中的libuavs3d,再依次选择顶部菜单“生成”→“生成libuavs3d”(或“Build libuavs3d”)。等待生成完毕,可在uavs3d工程的uavs3d-master/bin目录下找到uavs3d的库文件(包括libuavs3d.dll和libuavs3d.lib)。

二、安装AVS3的解码器libuavs3d

虽然Visual Studio把libuavs3d的dll库文件编译了出来,但是若想让FFmpeg识别libuavs3d,还得依照相应的目录结构放入libuavs3d的库文件和头文件,从而模拟Linux环境的安装结果。详细的安装步骤参考《FFmpeg开发实战:从零基础到短视频上线》一书的第8章的“8.1.4 给FFmpeg集成freetype”。
(1)在msys64的/usr/local目录下新建libuavs3d目录,并在该目录下创建lib子目录;
(2)把uavs3d工程中uavs3d-master/bin目录下的libuavs3d.lib和libuavs3d.dll两个文件复制到上面第一步创建的lib目录;
(3)在lib目录下创建pkgconfig子目录,并在pkgconfig目录下新建文件uavs3d.pc,给该pc文件填入以下的配置内容。

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

Name: uavs3d
Description: AVS3 decoder library 
Version: 1.2.0
Libs: -L${libdir} -luavs3d -lm -lpthread
Cflags: -I${includedir}

(4)在libuavs3d目录下创建include目录,并把uavs3d工程的uavs3d-master/source/decoder/uavs3d.h复制到include目录下。
经过以上步骤操作后的libuavs3d目录结构如下所示:

/usr/local/libuavs3d
 |--------------- lib
 |                 |-- libuavs3d.lib
 |                 |-- libuavs3d.dll
 |                 |-- pkgconfig
 |                        |----- uavs3d.pc
 |--------------- include

(5)接着给环境变量PKG_CONFIG_PATH添加libuavs3d的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容。

export PKG_CONFIG_PATH=/usr/local/libuavs3d/lib/pkgconfig:$PKG_CONFIG_PATH

(6)保存并退出profile文件后,在MSYS窗口中执行下面命令重新加载环境变量。

source /etc/profile

(7)执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

三、让FFmpeg启用libuavs3d

由于FFmpeg默认未启用libuavs3d,因此需要重新配置FFmpeg,标明启用libuavs3d,然后重新编译安装FFmpeg。FFmpeg的Windows环境完整编译过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“8.1 Windows环境编译FFmpeg”,详细的启用步骤说明如下。
1、回到FFmpeg源码的目录,执行以下命令重新配置FFmpeg,主要增加启用libuavs3d。(增加了选项--enable-libuavs3d)

./configure  --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libfreetype --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig --enable-openssl --enable-libuavs3d --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/lame/include -I/usr/local/libogg/include -I/usr/local/amr/include' --extra-ldflags='-L/usr/local/lame/lib -L/usr/local/libogg/lib -L/usr/local/amr/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

2、运行下面命令编译FFmpeg。

make clean
make -j4

3、执行下面命令安装FFmpeg。

make install
cp /usr/local/libuavs3d/lib/*.dll /usr/local/ffmpeg/bin

4、运行以下命令查看FFmpeg的版本信息。

ffmpeg -version

查看控制台回显的FFmpeg版本信息,找到“--enable-libuavs3d”,说明FFmpeg正确启用了AVS3的解码器libuavs3d。

目录
相关文章
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
383 2
|
7月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
4284 123
|
9月前
|
数据采集 运维 DataWorks
DataWorks 千万级任务调度与全链路集成开发治理赋能智能驾驶技术突破
智能驾驶数据预处理面临数据孤岛、任务爆炸与开发运维一体化三大挑战。DataWorks提供一站式的解决方案,支持千万级任务调度、多源数据集成及全链路数据开发,助力智能驾驶模型数据处理与模型训练高效落地。
|
监控 Java API
1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
SMS4J 是一款由国内技术团队打造的短信聚合框架,专为解决多短信服务商接入难题而生。它就像短信界的"瑞士军刀",目前已整合21家主流短信服务商,从阿里云、腾讯云到中国移动云MAS,开发者只需通过简单配置即可实现多平台无缝切换。
784 4
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
921 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
370 11
|
12月前
|
IDE 开发工具
TeaScript IDE集成开发环境
TeaScriptIDE 是一款功能丰富的集成开发环境,包含代码编辑器(语法着色提升可读性)、调试器(显示运行结果)、内置函数帮助文档、打包功能(生成单个可执行文件)以及保存/恢复最近文件的功能。其界面由菜单栏、工具栏、多标签页编辑窗口、控制台输出窗口和状态栏组成,支持快速命令调用、程序运行结果显示及错误信息提示。退出时会自动保存状态,下次启动可继续编辑上次打开的文件。
282 15
|
10月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
2102 0
|
Ubuntu Linux PHP
利用PHP压缩音频:Linux环境下的ffmpeg简易安装指南
希望这个指南能为你的编程之旅提供帮助。只需记住,每一行代码都像音乐的音符,组合在一起,创造出美妙的旋律。祝你编程愉快!
382 6
|
人工智能 程序员 测试技术
通义灵码与魔搭 Notebook 深度集成:在线编码开箱即用,开发效率倍增
通义灵码 2.0 AI 程序员 2025 年 1 月正式上线,目前已经服务百万开发者,成为国内开发者最受欢迎的智能编码助手。

热门文章

最新文章