FFmpeg开发笔记(六十七)Windows给FFmpeg集成支持RIST协议的librist

《FFmpeg开发实战:从零基础到短视频上线》一书的"10.2 FFmpeg推流和拉流"提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。

其中SRT全称为Secure Reliable Transport,中文叫做安全可靠传输协议。RIST全称为Reliable Internet Stream Transport,中文叫做可靠的互联网流传输协议。SRT和RIST两个协议均在2017年发布,腾讯视频云已将SRT作为传输层之上的协议。根据腾讯视频云的实践,相比传统的RTMP直播协议,SRT对推流卡顿问题有明显改善。
接下来以微软的视窗系统为例,介绍如何在Windows环境给FFmpeg集成支持RIST协议的librist,具体的操作步骤说明如下:

一、配置librist

librist是一款RIST协议的支持库。它的源码托管页面在https://code.videolan.org/rist/librist,最新版本是2024年11月发布的librist-v0.2.11,该版本的源码包下载地址是https://code.videolan.org/rist/librist/-/archive/v.0.2.11/librist-v.0.2.11.tar.gz。

librist的配置步骤说明如下。

1、安装编译工具meson和ninja

meson和ninja是基于Python语言的编译工具,故需确保Windows系统已经安装了Python3。另外,还要按照《FFmpeg开发实战:从零基础到短视频上线》第一章的"1.3.2 安装依赖的Windows软件"给电脑安装Visual Studio 2022。

接着依次选择Windows开始菜单的"Visual Studio 2022"→"x64 Native Tools Command Prompt for VS 2022",打开Visual Studio 2022的命令行界面,执行以下命令安装meson和ninja。

复制代码
pip3 install meson
pip3 install ninja

2、使用meson配置librist

先下载最新的librist源码,解压下载后的源码包,再从Visual Studio 2022的命令行进入librist源码目录:

复制代码
cd librist-v.0.2.11

然后运行下面命令生成librist的VS工程:

复制代码
meson setup build --buildtype=release --backend=vs

配置完成后,librist源码目录下出现build目录,里面便是meson给librist生成的VS工程。

二、编译librist

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

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

此时可在librist-v.0.2.11\build目录下找到librist.lib和librist.dll,这两个文件就是编译生成的librist库文件。

三、安装librist

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

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

2、把librist工程中build目录下的librist.lib和librist.dll两个文件复制到第一步创建的lib目录;

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

复制代码
prefix=/usr/local/librist

4、把librist工程的include目录复制到msys64的/usr/local/librist目录,把build\include\librist目录复制到msys64的/usr/local/librist/include目录;

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

复制代码
/usr/local/librist
 |--------------- lib
 |                 |----- librist.lib
 |                 |----- librist.dll
 |                 |----- pkgconfig
 |                           |----- librist.pc
 |--------------- include
 |                 |----- librist
 |                           |----- librist.h
 |                           |----- librist_config.h
 |                           |----- ......

四、编译安装FFmpeg

先下载最新的FFmpeg源码(版本号需大于等于7.1),再把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/librist/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-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/librist/lib/librist.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-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-librist",说明FFmpeg已经启用了支持RIST协议的librist。

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

相关推荐
while(1){yan}2 小时前
音视频流协议
音视频
nashane3 小时前
HarmonyOS 6学习:音频焦点管理实战——解决应用打开中断听书功能的技术指南
学习·音视频·harmonyos·harmonyos 5
悟纤18 小时前
Seedance 2.0 API 已上线 | 支持「人像视频生成」|支持100并发 | 满血版 [灵龙AI API]
人工智能·音视频·seedance 2.0
这儿有一堆花19 小时前
深入解析 Video.js:现代 Web 视频播放的工程实践
前端·javascript·音视频
人工智能研究所1 天前
Claude + HyperFrames:用 HTML 方式制作视频,AI 时代一切皆可 HTML?
人工智能·html·音视频·ai 视频·hyperframes·claude-
小驴程序源1 天前
TS 分片合并完整教程
python·ffmpeg
zzh9201 天前
基于51单片机的流水灯Proteus仿真按键切换 上到下下到上 2个灯(可定做)(免费代码+视频讲解)
51单片机·proteus·音视频
Shang180989357261 天前
T31ZX 君正/INGENIC智能视频处理器T31ZX可提供软硬件资料T31Z采用先进的低功耗设计
嵌入式硬件·fpga开发·音视频·t31zx智能视频处理器
音视频牛哥1 天前
纯血鸿蒙(HarmonyOS NEXT)下,如何实现低延迟RTSP、RTMP播放器音视频解码?
华为·音视频·harmonyos·鸿蒙rtmp播放器·鸿蒙rtsp播放器·harmonyos rtsp·鸿蒙next播放器
@hhr1 天前
使用java对接火山方舟doubao-seedance-1.5-pro 模型进行视频生成
java·python·音视频