​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)”,目的是把这两项的值改为自己电脑上的版本。

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。

FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器的更多相关文章

  1. 【开发笔记】- 在Windows环境下后台启动redis

    1. 进入 DOS窗口 2. 在进入Redis的安装目录 3. 输入:redis-server --service-install redis.windows.conf --loglevel verb ...

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

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

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

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

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

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

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

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

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

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

  7. Django开发笔记二

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...

  8. Modbus库开发笔记之十一:关于Modbus协议栈开发的说明(转)

    源: Modbus库开发笔记之十一:关于Modbus协议栈开发的说明

  9. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  10. Django笔记二十一之使用原生SQL查询数据库

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十一之使用原生SQL查询数据库 Django 提供了两种方式来执行原生 SQL 代码. 一种是使用 raw() 函数,一种是 使用 co ...

随机推荐

  1. JDK11的新特性:HTTP API和reactive streams

    目录 简介 怎么在java中使用reactive streams POST请求的例子 总结 JDK11的新特性:HTTP API和reactive streams 简介 在JDK11的新特性:新的HT ...

  2. WCHAR 字符串拼接

    LPCWSTR GetIniPath() { WCHAR buffer[MAX_PATH]; BOOL result = SHGetSpecialFolderPath(0, buffer, CSIDL ...

  3. win7电脑IE浏览器开发人员工具中不能切换浏览器版本

    win7电脑 IE浏览器 开发人员工具,不能切换IE版本 这个是IE浏览器的问题,需要安装个微软件东西就可以解决这个问题了.亲测有效 64位下载地址:https://wwi.lanzoui.com/i ...

  4. 重新点亮shell————sed的替换[十]

    前言 简单介绍一下sed 和 awk. 正文 这两个和vim的区别: vim 是交互式和 他们是非交互式 vim是文件操作模式与他们是行交互模式 sed sed 的 模式空间. sed的基本工作方式是 ...

  5. css 如何绘制正方形

    前言 如何绘制正方形的问题呢,在这里我先只写一种方式,后续补齐. 正文 写正方形有一个很特殊的地方就在于我们在写html的时候,宽是一定固定的,因为不可能溢出去,但是高就不固定了,因为可能要滑动. 问 ...

  6. Canvas图形编辑器-数据结构与History(undo/redo)

    Canvas图形编辑器-数据结构与History(undo/redo) 这是作为 社区老给我推Canvas,于是我也学习Canvas做了个简历编辑器 的后续内容,主要是介绍了对数据结构的设计以及His ...

  7. 4A 安全之授权:编程的门禁,你能解开吗?

    概述 在安全管理系统里面,授权(Authorization)的概念常常是和认证(Authentication).账号(Account)和审计(Audit)一起出现的,并称之为 4A.就像上一文章提到的 ...

  8. MySQL—MySQL架构

    MySQL-MySQL架构 MySQL逻辑架构图如下: Connectors连接器:负责跟客户端建立连接: Management Serveices & Utilities系统管理和控制工具: ...

  9. 房屋设计H51图纸

  10. HarmonyOS NEXT应用开发案例——自定义TabBar

    介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果. 效果图预览 使用说明: 依次点击tabBar页面,除了社区图标之外 ...