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

news/2024/10/6 4:16:19/文章来源:https://www.cnblogs.com/aqi00/p/18240192
《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的官网地址是https://strawberryperl.com/,最新版本安装包的下载链接为https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_53822_64bit/strawberry-perl-5.38.2.2-64bit.msi。
安装包下载完毕,双击即可启动安装程序,注意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的源码下载页面是https://www.openssl.org/source/,比如openssl-3.3.0的下载链接为https://www.openssl.org/source/openssl-3.3.0.tar.gz。
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协议的支持库。它的源码托管页面是https://github.com/Haivision/srt,最新版本是2023年8月发布的libsrt-1.5.3,该版本的源码包下载地址是https://github.com/Haivision/srt/archive/refs/tags/v1.5.3.tar.gz。
先解压下载完的源码包,再打开cmake-gui,在Source栏填入libsrt的源码路径比如E:/VisualProject/srt-1.5.3,在Build栏填入libsrt的编译路径比如E:/VisualProject/srt-1.5.3/build。如下图所示。

接着单击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开发实战:从零基础到短视频上线》一书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739285.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习进度

(1)通过视频学习了解了java基本概述 (2)成功下载了Eclipse,并搭建java环境 (3)使用Eclipse运行"hello world"程序 代码如下: package hello; public class helloworld { public static void main(String[] args) {// TODO Auto-generated method stubSystem.…

横截面交易策略:概念与示例

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 什么是横截面策略 横截面交易策略(Cross-Sectional Trading Strategy)是一种金融市场上的交易策略,它是基于不同资产之间的相对价值或其他因子的差异来进行投资决策。这种策略的核…

Spark快速大数据分析PDF下载读书分享推荐

《Spark 快速大数据分析》是一本为 Spark 初学者准备的书,它没有过多深入实现细节,而是更多关注上层用户的具体用法。不过,本书绝不仅仅限于 Spark 的用法,它对 Spark 的核心概念和基本原理也有较为全面的介绍,让读者能够知其然且知其所以然。 Spark快速大数据分析PDF下载…

IP核:XDMA学习

知识: XDMA效率没有RIFFA高,最高似乎只支持1288位宽; 输出的用户时钟是250MHZ; IP核配置: 参考: https://docs.amd.com/r/zh-CN/pg195-pcie-dma/ 具体:重要:PCIe:BARs标签页该标签页主要用于配置 BAR,所谓的使能和配置各接口 interface,其实质是配置不同的 BAR,首先介…

【模块三】Python高级

面向对象基础 类和对象 概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式。 类是人们抽象出来的一个概念,所有拥有相同属性和功能的事物称为一个类;而拥有相同属性和功能的具体事物则成为这个类的实例对象。 面向对象编程提供了一种从现实世界中抽象…

大气热力学(5)——绝热过程

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记,现转化为电子版本以作存档。相较于手写笔记,电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 目录5.1 气块的概念5.2 热力学第一定律的几种微分形式5.3 干绝热过程5.4 干绝热递减率(干绝热直…

如何解决服务器开机报警问题

解决服务器开机报警问题,需要按照一系列步骤进行故障排查和修复。 一、初步检查与确认 查看报警信息: 观察服务器的指示灯,特别是电源指示灯、硬盘指示灯等,看是否有异常。 如果服务器有显示屏或终端窗口,查看是否有相应的警告信息或错误代码。 确认电源状态: 检查电源线…

用友财务软件数据库恢复

是一个关键的操作,旨在解决数据库文件损坏或数据丢失的问题。 一、恢复方法使用软件内置的数据恢复工具 步骤: 打开用友财务软件,进入“工具”或“数据管理”等相关菜单。 找到“数据库恢复”或“数据恢复”选项,点击进入。 选择需要恢复的数据库文件和备份文件。这里需要确…

管家婆数据库数据恢复

一、确认数据丢失情况 首先,需要确认数据是否真的丢失,以及丢失的数据范围。有时候,数据可能只是暂时无法访问,或者由于软件故障导致的数据显示问题。 二、检查备份定期备份的重要性 管家婆软件通常会具备自动备份功能,用户应该确保该功能已经开启,并定期检查备份文件的完…

服务器进水主板维修

服务器进水主板的维修是一个复杂且需要专业技能的过程。 一、立即断电与初步处理 立即断电:一旦发现服务器进水,应立即切断电源,防止电流通过水分造成短路,进一步损坏主板和其他电子元件。 移除电池与外设:如果是笔记本电脑或可拆卸电池的服务器,迅速移除电池和所有外部连…

sqlserver数据库MDF文件修复

针对SQL Server数据库的MDF文件修复,这是一个相对复杂的过程,具体方法取决于文件的损坏程度、是否有备份以及数据库的状态。以下是一些常见的修复方法:使用备份恢复 这是最直接且最可靠的方法。如果你有数据库的备份,并且备份是在MDF文件损坏之前创建的,那么你可以通过还原…

2024年6月后2周重要的大语言模型论文总结:LLM进展、微调、推理和对齐

本文总结了2024年6月后两周发表的一些最重要的大语言模型论文。这些论文涵盖了塑造下一代语言模型的各种主题,从模型优化和缩放到推理、基准测试和增强性能。 LLM进展与基准 1、 BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Complex Instruc…