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

ffmpeg,windows,avs3 · 浏览次数 : 0

小编点评

**AVS3视频编解码器libuavs3d安装指南** **步骤 1:下载并编译libuavs3d解码器** - 从 GitHub 上下载 libuavs3d 解码器源代码。 - 使用 cmake 编译源代码,并根据提示更改编译参数。 - 生成 libuavs3d.lib 和 libuavs3d.dll 解码器。 **步骤 2:设置环境变量PKG_CONFIG_PATH** - 编辑 `/etc/profile` 文件,添加以下行: ``` export PKG_CONFIG_PATH=/usr/local/libuavs3d/lib/pkgconfig:$PKG_CONFIG_PATH ``` - 保存并退出 `profile` 文件。 **步骤 3:重新加载环境变量** - 在 MSYS 窗口中运行以下命令: ``` source /etc/profile ``` **步骤 4:配置FFmpeg** - 将 `FFmpeg` 编译后的 `ffmpeg` 文件复制到 `C:\ffmpeg\bin` 路径中。 - 修改 `ffmpeg` 的 `config.txt` 文件,添加以下参数: ``` -enable-libuavs3d ``` **步骤 5:测试FFmpeg版本** - 启动 `ffmpeg`,检查控制台输出的 `--enable-libuavs3d` 参数。 - 应该显示 `true`,表明 `libuavs3d` 已正确启用。 **总结** 完成以上步骤后,你应该能够成功地安装和配置 libuavs3d 解码器,并将其用于 FFmpeg 编解码视频。

正文

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解码器相似的内容:

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

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

FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流

​OBS是一个开源的直播录制软件,英文全称叫做Open Broadcaster Software,广泛用于视频录制、实时直播等领域。OBS不但开源,而且跨平台,兼容Windows、Mac OS、Linux等操作系统。 OBS的官网是https://obsproject.com/,录制软件名叫OBS

FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid

​XviD是个开源的视频编解码器,它与DivX一同被纳入MPEG-4规范第二部分的视频标准,但DivX并未开源。早期的MP4视频大多采用XviD或者DivX编码,当时的视频格式被称作MPEG-4。现在常见的H.264后来才增补到MPEG-4规范的第十部分,当然如今使用XviD压缩的视频已经不多了。

FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKi

FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款开源项目的成果。据说在实际测试中,AV1标准比H.265(HEVC)的压缩率提升了

FFmpeg开发笔记(二十二)FFmpeg中SAR与DAR的显示宽高比

​《FFmpeg开发实战:从零基础到短视频上线》一书提到:通常情况下,在视频流解析之后,从AVCodecContext结构得到的宽高就是视频画面的宽高。然而有的视频文件并非如此,如果按照AVCodecContext设定的宽高展示视频,会发现画面被压扁或者拉长了。比如该书第10章源码playsync.

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

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

FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流

​RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议)。RTMP Streamer支持的视频编码包括H264、H265、AV1等等,支持的音频编码包括AAC、G711、OPUS等等,可谓功能强大

FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg

​《FFmpeg开发实战:从零基础到短视频上线》一书的“第11章 FFmpeg的桌面开发”介绍了如何在Windows环境对Qt结合FFmpeg实现桌面程序,那么Windows系统通过Visual Studio开发桌面程序也是很常见的,下面就介绍如何在Visual Studio的C++工程中集成FFm

FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址

​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKi