FFmpeg开发笔记(三十五)Windows情况给FFmpeg集成libsrt

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

​《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的源码包,并进入解压后的目录,也就是执行下面命令:
  1. tar zxvf openssl-3.3.0.tar.gz
  2. cd openssl-3.3.0
复制代码
2、执行下面命令通过perl设置openssl库:
  1. perl Configure VC-WIN64A --prefix=E:\Apache\openssl
复制代码
3、运行下面命令编译openssl。
  1. nmake
复制代码
4、编译完成后,运行下面命令安装openssl。(该步骤编译比较久,请耐烦等待)
  1. 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文件的下面这行设置。
  1. prefix=C:/Program Files (x86)/SRT
复制代码
改为下面这行设置
  1. 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目录结构如下所示:
  1. /usr/local/libsrt
  2.  |--------------- lib
  3.  |                 |-- srt.lib
  4.  |                 |-- srt.dll
  5.  |                 |-- pkgconfig
  6.  |                        |----- srt.pc
  7.  |--------------- include
  8.  |                 |-- srt
  9.  |                        |----- access_control.h
  10.  |                        |----- logging_api.h
  11.  |                        |----- platform_sys.h
  12.  |                        |----- srt.h
  13.  |                        |----- udt.h
  14.  |                        |----- version.h
  15.  |                 |-- win
  16.  |                        |----- syslog_defs.h
  17.  |                        |----- unistd.h
  18.  |                        |----- wintime.h
复制代码
5、接着给情况变量PKG_CONFIG_PATH添加libsrt的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容。
  1. export PKG_CONFIG_PATH=/usr/local/libsrt/lib/pkgconfig:$PKG_CONFIG_PATH
复制代码
6、保存并退出profile文件后,在MSYS窗口中执行下面命令重新加载情况变量。
  1. source /etc/profile
复制代码
7、执行下面命令查看当前的情况变量,发现PKG_CONFIG_PATH的修改已经奏效。
  1. 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)
  1. ./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。
  1. make clean
  2. make -j4
复制代码
3、执行下面命令安装FFmpeg。
  1. make install
  2. cp /usr/local/libsrt/lib/*.dll /usr/local/ffmpeg/bin
复制代码
4、运行以下命令查看FFmpeg的版本信息。
  1. ffmpeg -version
复制代码
查看控制台回显的FFmpeg版本信息,找到“--enable-libsrt”,阐明FFmpeg正确启用了SRT协议的支持库libsrt。 
更多详细的FFmpeg开发知识拜见《FFmpeg开发实战:从零基础到短视频上线》一书。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表