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

news2024/10/6 22:24:57

《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、运行下面命令编译libsrt。

nmake

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

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

本系列的FFmpeg进阶文章目录为《FFmpeg开发笔记全目录(FFmpeg开发实战详解,含直播系统的搭建过程)》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序毕业设计-驾校管理系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

WEB基础--Mybatis

了解Mybatis 什么是Mybatis 市面上最流行的技术架构:SSM 他们代表了 Spring业务层框架,SpringMvc WEB层框架以及MyBatis数据库持久层框架。 MyBatis 作为一个数据库持久层框架,是基于ORM规范(对象关系映射) 。类似我们以前的JDBC 和 JPA。…

【目标检测】基于深度学习的车牌识别管理系统(含UI界面)【python源码+Pyqt5界面 MX_002期】

系统简介: 车牌识别技术作为经典的机器视觉任务,具有广泛的应用前景。通过图像处理方法,车牌识别技术能够对车牌上的字符进行检测、定位和识别,从而实现计算机对车牌的智能化管理。在现实生活中,车牌识别系统已在小区停…

第二届京津冀现代商贸物流金融创新发展百人大会将于6月16日在廊坊举行

物流是实体经济的“筋络”,联接生产和消费、内贸和外贸,必须有效降低全社会物流成本,增强产业核心竞争力,提高经济运行效率。《京津冀协同发展规划纲要》赋予河北“三区一基地”的功能定位,建设全国现代商贸物流重要基…

vxeTable怎么导出excel文件

文章目录 一、代码示例二、调用导出事件参数详解下载引用 三、过滤某列数据导出 一、代码示例 <vxe-buttonclick"exportDataEvent"circleicon"vxe-icon-download">导出</vxe-button><vxe-tableborderroundstripeheight"auto"ref&…

融合商品计划与供应链管理:打造高效协同供应链生态

在当今竞争激烈的市场环境中&#xff0c;企业要想保持持续的竞争优势&#xff0c;除了拥有创新的产品和服务外&#xff0c;还需要具备高效协同的供应链管理能力。本文将探讨如何将商品计划与供应链管理紧密结合&#xff0c;以打造高效协同的供应链生态&#xff0c;从而提升企业…

3d模型转换器怎么用?---模大狮模型网

在当今数字化时代&#xff0c;3D技术被广泛应用于各行各业&#xff0c;从动画制作到工程设计再到游戏开发&#xff0c;都离不开3D模型。然而&#xff0c;由于不同软件之间的兼容性问题&#xff0c;我们常常需要将一个格式的3D模型转换成另一个格式。在这种情况下&#xff0c;3D…

CMA、CNAS软件检测报告如何收费?软件测评中心出具报告需多久?

众所周知&#xff0c;各行各业都需要资质认证&#xff0c;正如教师会有教师资格证&#xff0c;医师会有医师资格证&#xff0c;律师会有律师证&#xff0c;软件产品亦如此。对于软件测试报告来说CMA和CNAS资质认证就是获得行业甚至国家认可的重要依据。 CMA和CNAS软件检测报告…

ant组件库日期选择器汉化

ant组件库日期选择器默认英文 如何汉化 跟着官网走不能完全实现汉化。 这里提供一个解决方案&#xff0c;首先&#xff0c;通过pnpm下载moment包。 然后引入和注册文件&#xff1a; import zhCN from ant-design-vue/es/locale/zh_CN;import moment from moment;moment.loca…

导出 Whisper 模型到 ONNX

前言 在语音识别领域&#xff0c;Whisper 模型因其出色的性能和灵活性备受关注。为了在更多平台和环境中部署 Whisper 模型&#xff0c;导出为 ONNX 格式是一个有效的途径。ONNX&#xff08;Open Neural Network Exchange&#xff09;是一个开放格式&#xff0c;支持不同的深度…

Adobe Premiere 专业视频编辑软件资源下载安装!pr 2024最新版软件分享

Adobe Premiere&#xff0c;作为一款非线性视频编辑软件&#xff0c;它打破了传统线性编辑的限制&#xff0c;为用户提供了更加灵活和自由的创作空间。 在电影制作领域&#xff0c;Adobe Premiere的出色表现赢得了众多导演和剪辑师的青睐。其强大的编辑功能使得影片的剪辑过程更…

单细胞RNA测序(scRNA-seq) 理解Seurat对象存储信息含义和基本操作

单细胞测序技术是在单个细胞水平上&#xff0c;对基因组、转录组和表观基因组水平进行分析测序技术。bulk RNA-seq获得的是组织或器官等大量细胞中表达信号的均值&#xff0c;无法获取细胞之间的差异信息&#xff08;即丢失了细胞的异质性&#xff09;&#xff0c; 而单细胞测序…

快速上手 GreatSQL 8.0.32-25 with openEuler 24.03 LTS

5 月底&#xff0c;openEuler 24.03 LTS 发布&#xff0c;详情戳&#xff1a; 恭喜&#xff01;openEuler 24.03 LTS 版本发布&#xff1a;首个AI原生开源操作系统 在诸多亮点特性中&#xff0c;有一条值得注意&#xff1a; 集成 GreatSQL 数据库&#xff0c;适用于金融级应用场…

JAVA面试题:Redis分布式锁

Redis分布式锁 分布式锁使用的场景 集群情况下的定时任务,抢单,幂等性等场景 抢券场景 查询库存 -> 扣减库存 多个并发线程同时查询库存,出现超卖问题 添加互斥锁 所有线程执行操作之前必须尝试获取锁 保证一次只有一个线程能走查询库存->扣减库存的流程 Redis分…

模糊控制器实现对某个对象追踪输入

MATLAB是一个十分便捷的软件&#xff0c;里面提供了许多集成的组件&#xff0c;本文利用simulink实现模糊控制器实现对某个对象追踪输入。 这里的对象根据自己的需求可以修改&#xff0c;那么搭建一个闭环控制系统并不是难事儿&#xff0c;主要是对于模糊控制器参数的设置&…

记C#优化接口速度过程

前提摘要 首先这个项目是接手的前一任先写的项目&#xff0c;接手后&#xff0c;要求对项目一些速度相对较慢的接口进行优化&#xff0c;到第一个速度比较慢的接口后&#xff0c;发现单接口耗时4-8秒&#xff0c;是的&#xff0c;请求同一个接口&#xff0c;在参数不变的情况下…

【Linux】运维-Kubernetes(k8s)应用介绍及使用-了解

一、介绍 Kubernetes&#xff0c;也被称为K8s或Kube&#xff0c;是谷歌推出的业界最受欢迎的容器编排器。 K8s是一个架构良好的分布式系统的例子。它将集群中的所有机器都视为单个资源池的一部分。 K8s与其他成熟的分布式系统一样&#xff0c;有两层&#xff1a;头节点和工作节…

defer关键字

【1】defer关键字的作用&#xff1a; 在函数中&#xff0c;程序员经常需要创建资源&#xff0c;为了在函数执行完毕后&#xff0c;及时的释放资源&#xff0c;Go的设计者提供defer关键字 【2】案例展示&#xff1a; 【3】代码变动一下&#xff0c;再次看结果&#xff1a; 发…

Vue3【十九】自定义Hooks钩子 将数据和方法分组

Vue3【十九】自定义Hooks钩子 将数据和方法分组 Vue3【十九】自定义Hooks钩子 将数据和方法分组 每个分组都可以放置 各种生命周期钩子 分组和可以使用计算属性等 案例截图 目录结构 代码 person.vue <template><div class"person"><h2>Vue3自定…

Ecovadis认证准则

Ecovadis准则是一个国际性的企业社会责任(CSR)评估平台&#xff0c;旨在帮助企业、投资者、供应商和利益相关者等评估和管理其全球供应链的社会和环境影响。该准则涵盖了可持续性、人权、劳工权利、环境保护等方面的评估内容&#xff0c;为企业提供了全面的评估标准和管理工具&…