FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt

本文涉及的产品
视觉智能开放平台,视频通用资源包5000点
视觉智能开放平台,图像通用资源包5000点
视觉智能开放平台,分割抠图1万点
简介: 该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。

​《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集成SRT协议的支持库libsrt。

一、安装Perl

libsrt依赖于openssl库,而openssl库又要通过perl编译,所以得先安装perl。
安装包下载完毕,双击即可启动安装程序,注意perl的安装目录不能带空格,因此不能安装到“Program Files”这样的目录,只能安装在没有空格的目录,比如E:\Apache\Strawberry\。
Perl安装完毕,会自动在Path变量中添加Perl的安装路径。注意修改Windows环境变量的Path值,把msys64的几个bin路径都挪到perl路径后面,确保编译openssl时调用新安装的perl程序,而非调用msys64的perl程序。

二、安装Nasm

如果之前已经在msys64中安装了nasm,此时就不必再安装nasm,可以直接使用msys64里面安装的nasm程序。详细的nasm安装说明参见《FFmpeg开发实战:从零基础到短视频上线》一书的“1.3.3 安装已编译的FFmpeg及其dll库”。

三、编译安装OpenSSL

因为libsrt依赖于openssl库,所以编译libsrt前要先编译openssl库。
openssl的编译和安装步骤说明如下。
1、打开VisualStudio的控制台,也就是开始菜单依次选择“Visual Studio 2022”——“x86_x64 Cross Tools Command Prompt for VS 2022”。然后解压openssl的源码包,并进入解压后的目录,也就是执行下面命令:

tar zxvf openssl-3.3.0.tar.gz
cd openssl-3.3.0

2、执行下面命令通过perl配置openssl库:

perl Configure VC-WIN64A --prefix=E:\Apache\openssl

3、运行下面命令编译openssl。

nmake

4、编译完成后,运行下面命令安装openssl。(该步骤编译比较久,请耐心等待)

nmake install

5、给Windows环境变量新增OPENSSL_ROOT_DIR,变量值为OpenSSL的安装路径“E:\Apache\openssl”。

四、配置libsrt

libsrt是一款SRT协议的支持库,最新版本是2023年8月发布的libsrt-1.5.3。
先解压下载完的源码包,再打开cmake-gui,在Source栏填入libsrt的源码路径比如E:/VisualProject/srt-1.5.3,在Build栏填入libsrt的编译路径比如E:/VisualProject/srt-1.5.3/build。如下图所示。

cmake-srt.png

接着单击cmake-gui窗口中部左侧的Configure按钮,开始配置srt源码。等待配置完毕,单击Configure按钮右边的Generate按钮,开始生成srt源码的vs工程。等待生成完毕,单击Generate按钮右边的Open Project按钮,启动VisualStudio自动加载srt的vs工程。

五、编译libsrt

等待VisualStudio启动完毕,依次选择顶部菜单“生成”→“配置管理器”,在打开的配置管理器界面上,找到左上角的“活动解决方案配置”下拉框,把Debug模式改为Release模式,再单击右下角的关闭按钮。
接着单击界面右侧解决方案列表中的srt_shared,再依次选择顶部菜单“生成”→“生成srt_shared”(或“Build srt_shared”)。等待生成完毕,即可在srt源码路径的build/Release目录下找到libsrt的库文件(包括srt.dll和srt.lib)。

六、安装libsrt

虽然VisualStudio把libsrt的dll库文件编译了出来,但是若想让FFmpeg识别libsrt,还得依照相应的目录结构放入libsrt的库文件和头文件,从而模拟Linux环境的安装结果。详细的安装步骤参考《FFmpeg开发实战:从零基础到短视频上线》一书的第8章的“8.1.4 给FFmpeg集成freetype”。
1、在msys64的/usr/local目录下新建libsrt目录,并在该目录下创建lib子目录;
2、把srt源码路径的build/Release目录下的srt.lib和srt.dll两个文件复制到上面第一步创建的lib目录;
3、在lib目录下创建pkgconfig子目录,把srt源码路径下的build/srt.pc复制到pkgconfig目录,并将该pc文件的下面这行配置。

prefix=C:/Program Files (x86)/SRT

改为下面这行配置

prefix=/usr/local/libsrt

4、在libsrt目录下创建include目录,并在include目录创建srt子目录,把srt源码路径的build/version.h以及srtcore目录下的access_control.h、logging_api.h、platform_sys.h、srt.h、udt.h等头文件都复制到srt目录下。还要把srt源码路径的common下面的win目录整个复制到include目录下。
经过以上步骤操作后的libsrt目录结构如下所示:

/usr/local/libsrt
 |--------------- lib
 |                 |-- srt.lib
 |                 |-- srt.dll
 |                 |-- pkgconfig
 |                        |----- srt.pc
 |--------------- include
 |                 |-- srt
 |                        |----- access_control.h
 |                        |----- logging_api.h
 |                        |----- platform_sys.h
 |                        |----- srt.h
 |                        |----- udt.h
 |                        |----- version.h
 |                 |-- win
 |                        |----- syslog_defs.h
 |                        |----- unistd.h
 |                        |----- wintime.h

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

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

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

source /etc/profile

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

env | grep PKG_CONFIG_PATH

七、让FFmpeg启用libsrt

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

./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-libxvid --enable-libsrt --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/lame/include -I/usr/local/libogg/include -I/usr/local/amr/include -I/usr/local/libxvid/include' --extra-ldflags='-L/usr/local/lame/lib -L/usr/local/libogg/lib -L/usr/local/amr/lib -L/usr/local/libxvid/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

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

make clean
make -j4

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

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

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

ffmpeg -version

查看控制台回显的FFmpeg版本信息,找到“--enable-libsrt”,说明FFmpeg正确启用了SRT协议的支持库libsrt。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

目录
相关文章
|
7月前
|
XML 存储 搜索推荐
Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理
Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理
139 7
Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理
|
4月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
215 11
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
1303 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
7月前
|
IDE 开发工具
TeaScript IDE集成开发环境
TeaScriptIDE 是一款功能丰富的集成开发环境,包含代码编辑器(语法着色提升可读性)、调试器(显示运行结果)、内置函数帮助文档、打包功能(生成单个可执行文件)以及保存/恢复最近文件的功能。其界面由菜单栏、工具栏、多标签页编辑窗口、控制台输出窗口和状态栏组成,支持快速命令调用、程序运行结果显示及错误信息提示。退出时会自动保存状态,下次启动可继续编辑上次打开的文件。
190 15
|
7月前
|
Ubuntu 数据库 虚拟化
Windows 环境下 Odoo 安装保姆级教程
本教程详细介绍了在 Windows 系统上通过虚拟机部署 Odoo 的完整流程。首先确认硬件需求,确保 CPU、内存和磁盘空间满足最低配置;接着安装 VMware Workstation Pro 并创建 Ubuntu 虚拟机,配置桥接网络以实现主机与虚拟机的通信;随后借助微聚云快速安装预配置好的 Odoo 环境,简化复杂环境搭建;最后通过浏览器访问虚拟机 IP,完成 Odoo 数据库初始化及基础设置。整个过程清晰易懂,适合新手快速上手 Odoo 部署。
906 4
|
7月前
|
Ubuntu Linux PHP
利用PHP压缩音频:Linux环境下的ffmpeg简易安装指南
希望这个指南能为你的编程之旅提供帮助。只需记住,每一行代码都像音乐的音符,组合在一起,创造出美妙的旋律。祝你编程愉快!
256 6
|
8月前
|
存储 运维 监控
提升Windows Server环境安全性:ADAudit Plus的五大关键优势
在Windows Server环境中,内置的安全审计工具虽有用,但存在专业门槛高、耗时及功能缺失等问题。第三方工具ADAudit Plus应运而生,其五大优势包括:日志聚合、关键活动检测、定制化报告、灵活安全配置和长期日志保留,有效提升系统监控与合规能力。选择ADAudit Plus,助力企业更高效应对审计挑战,强化安全性。
205 2
|
10月前
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
633 13
|
11月前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
866 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
|
11月前
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。

热门文章

最新文章